python正则表达式爬虫实例_案例:使用正则表达式的爬虫

本文介绍了如何使用Python的正则表达式爬虫抓取Loaderman博客中的段子。首先解析URL规律,通过定义Spider类的loadPage方法获取网页源代码,处理编码问题。接着,利用正则表达式匹配div类为'c_b_p_desc'的内容,实现数据筛选。示例代码详细展示了爬取和匹配过程。
摘要由CSDN通过智能技术生成

用正则表达式进行对爬取到的全部网页源代码进行筛选。

网站: https://www.cnblogs.com/loaderman/default.html?page=1

打开之后,不难看到里面一个一个灰常有内涵的段子,当你进行翻页的时候,注意url地址的变化:

第一页url: https://www.cnblogs.com/loaderman/default.html?page=1

第二页url: https://www.cnblogs.com/loaderman/default.html?page=2

第三页url: https://www.cnblogs.com/loaderman/default.html?page=3

第四页url: https://www.cnblogs.com/loaderman/default.html?page=4

这样我们的url规律找到了,要想爬取所有,只需要修改一个参数即可。 下面我们就开始一步一步将所有的段子爬取下来吧。

第一步:获取数据

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

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

我们创建一个文件,叫spider.py

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

importurllib2classSpider:"""爬虫类"""

defloadPage(self, page):"""@brief 定义一个url请求网页的方法

@param page 需要请求的第几页

@returns 返回的页面html"""url= "https://www.cnblogs.com/loaderman/default.html?page=" +str(page)

#User-Agent头

user_agent = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT

6.1; Trident/5.0'headers= {'User-Agent': user_agent}

req= urllib2.Request(url, headers =headers)

response=urllib2.urlopen(req)

html=response.read()printhtml#return html

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

那么loadPage(self, page) 中的page是我们指定去请求第几页。

最后通过 print html打印到屏幕上。

然后我们写一个main函数见到测试一个loadPage方法

2. 写main函数测试一个loadPage方法

if __name__ == '__main__':

print '请按下回车开始'raw_input()#定义一个Spider对象

mySpider =Spider()

mySpider.loadpage(1)

程序正常执行的话,我们会在屏幕上打印了第一页的全部html代码。 如果html中的中文部分显示的可能是乱码 。

则需要简单的将得到的网页源代码处理一下:

defloadPage(self, page):"""@brief 定义一个url请求网页的方法

@param page 需要请求的第几页

@returns 返回的页面html"""url= "https://www.cnblogs.com/loaderman/default.html?page=" +str(page)

#User-Agent头

user_agent = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT

6.1; Trident/5.0' headers = {'User-Agent': user_agent}

req= urllib2.Request(url, headers =headers)

response=urllib2.urlopen(req)

html=response.read()

gbk_html= html.decode('gbk').encode('utf-8')#print gbk_html

return gbk_html

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

这样我们再次执行以下mySpider.py ,会发现之前的中文乱码可以正常显示了。

第二步:筛选数据

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

首先

import re

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

下一步匹配规则:

打开网页,鼠标点击右键 “ 查看源代码 ” 需要的每个的内容i 描述都是在一个

标签中,而且每个div都有一个属性class = "c_b_p_desc"

所以,我们只需要匹配到网页中所有

的数据就可以了。

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

(.*?)

这个表达式实际上就是匹配到所有div中class="c_b_p_desc 里面的内容(具体可以看正则)

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

defloadPage(self):"""作用:下载页面"""

print "正在下载数据...."url= "https://www.cnblogs.com/loaderman/default.html?page=" +str(self.page)

headers= {"User-Agent" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.99 Safari/537.36"}

request= urllib2.Request(url, headers =headers)

response=urllib2.urlopen(request)#获取每页的HTML源码字符串

html =response.read()#print html

#创建正则表达式规则对象,匹配每页里的内容,re.S 表示匹配全部字符串内容

pattern = re.compile('

(.*?)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值