怎么在Python中使用正则表达式实现一个爬虫功能

  介绍

这篇文章给大家介绍怎么在Python中使用正则表达式实现一个爬虫功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

<强>第一步:获取数据

1。按照我们之前的用法,我们需要一个加载页面的方法。

这里我们统一定义一个类,将url请求作为一个成员方法处理。

我们创建了一个文件,叫duanzi_spider。py

然后定义一个蜘蛛类,并且添加一个加载页面的成员方法。

import  urllib2   class 蜘蛛:   “才能”;“   ,,,内涵段子爬虫类   “才能”;“   def 才能loadPage(自我,,页面):   ,,,,,,   ,,,,,@brief 定义一个url请求网页的方法   ,,,,,@param 页面需要请求的第几页   ,,,,,@returns 返回的页面url   ,,,,,,   ,,,url =,“http://www.neihan8.com/article/list_5_", +, str(页面)+,“.html"   ,,,#用户代理头   ,,,user_agent =,“Mozilla/5.0,(兼容;,MSIE  9.0;, Windows  NT6.1;,三叉戟/5.0“   ,,,headers =, {“User-Agent": user_agent}   ,,,req =, urllib2.Request (url, headers =,标题)   ,,,response =, urllib2.urlopen(要求)   ,,,print  html

以上的loadPage的实现思想想必大家都应该熟悉了,需要注意定义python类的成员方法需要额外添加一个参数自我。

2。主要写函数测试一个loadPage方法

if  __name__ ==,“__main__":   “才能”;“   ,,,=====================,,,,,内涵段子小爬虫   ,,,=====================安拍堋?“   打印才能(“请按下回车开始“)   ,,raw_input ()   ,,   #才能定义一个蜘蛛对象   时间=mySpider 才能;蜘蛛()   mySpider.loadPage才能(1)

程序正常执行的话,我们会在皮姆上打印了内涵段子第一页的全部html代码。但是我们发现,html中的中文部分显示的可能是乱码。

那么我们需要简单的将得到的网页源代码处理一下:

def  loadPage(自我,,页面):   “才能”;“   ,,,@bridf 定义一个url请求网页的方法   ,,,@param  page 需要请求的第几页   ,,,@returns 返回的页面html   “才能”;“   url =,才能“http://www.neihan8.com/article/list_5_" + str(页面)+“.html"   ,#用户代理头   user-agent =,才能“Mozilla/5.0,(兼容;,MSIE  9.0;, Windows  NT6.1;,三叉戟/5.0“   headers 才能=,{“User-Agent":用户代理}   req 才能=,urllib2.Request (url, headers =,标题)   时间=response 才能;urllib2.urlopen(要求)   时间=html 才能;response.read ()   时间=gbk_html 才能;html.decode (“gbk") .encode (“utf-8")   return 才能gbk_html

注意:对于每个网站对中文的编码各自不同,所以html.decode (“gbk")的写法并不是通用的,根据网站的编码而异。

<强>第二步:筛选数据

接下来我们已经得到了整个页面的数据。但是,很多内容我们并不关心,所以下一步我们需要筛选数据。如何筛选,就用到了上一节讲述的正则表达式

首先

import  re

然后,我们得到的gbk_html中进行筛选匹配。

<强>我们需要一个匹配规则

我们可以打开内涵段子的网页,鼠标点击右键“查看源代码,你会惊奇的发现,我们需要的每个段子的内容都是在一个& lt; div>标签中,而且每个div标签都有一个属性类=癴18 mb20"

<强>根据正则表达式,我们可以推算出一个公式是:

<代码> & lt; div . * ?类=癴18 mb20"祝辞(. * ?)& lt;/div>

这个表达式实际上就是匹配到所有div中类=癴18 mb20"里面的内容(具体可以看前面介绍)

然后这个正则应用到代码中,我们会得到以下代码:

def  loadPage(自我,,页面):   “才能”;“   ,,,@brief 定义一个url请求网页的办法   ,,,@param  page 需要请求的第几页   ,,,@returns 返回的页面html   “才能”;“   url =,才能“http://www.neihan8.com/article/list_5_", + str(页面),+,“.html"   ,#用户代理头   user-agent =,才能“Mozilla/5.0,(兼容;,MSIE  9.0;, Windows  NT6.1;,三叉戟/5.0“,      headers 才能=,{“User-Agent":用户代理}   req 才能=,urllib2.Request (url,头=标题)   时间=response 才能;urllib2.urlopen(要求)      时间=html 才能;response.read ()      时间=gbk_html 才能;html.decode (“gbk") .encode (“utf-8")      #找才能到所有的段子内容& lt; div 类=癴18  mb20"祝辞& lt;/div>   # re.S 才能如果没有re.S,则是只匹配一行有没有符合规则的字符串,如果没有则匹配下一行重新匹配   #才能如果加上re.S,则是将所有的字符串按一个整体进行匹配   pattern 才能=,re.compile (" # 39; & lt; div . * ?类=癴18  mb20"祝辞(. * ?)& lt;/div> & # 39;,, re.S)   时间=item_list 才能;pattern.findall (gbk_html)   return  item_list才能   def  printOnePage(自我,,item_list,,页面):   “才能”;“   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在Python中使用正则表达式实现一个爬虫功能