既然有了正则表达式这个法宝,我们就可以把爬取的网页源代码全部过滤掉。一起来试试爬取内涵段子网站:http://www.neihan8.com/articl...打开后不难看出,里面经常有灰色和内涵段子。翻页时注意url地址的变化:第一页url:http://www.neihan8.com/article/list_5_1.html第二页url:http://www.neihan8.com/article/list_5_2.html第三页url:http://www.neihan8.com/article/list_5_3.html第四页url:http://www.neihan8.com/article/list_5_4.html这样我们的url规则就找到了,去抓取所有段,只需要修改一个参数。让我们开始逐步爬取所有段落。第一步:获取数据1、根据我们之前的用法,我们需要写一个加载页面的方法。这里统一定义一个处理url请求的类作为成员方法。我们创建一个名为duanzi_spider.py的文件,定义一个Spider类,添加一个加载页面的成员方法importurllib2classSpider:""""""内涵段爬虫类defloadPage(self,page):""""""@brief定义一个网页的url请求方法@parampage请求的第一个页面@returns返回页面htmlurl="http://www.neihan8.com/article/list_5_"+str(page)+".html"#User-Agentheaderuser_agent='Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.1;Trident/5.0'headers={'User-Agent':user_agent}req=urllib2.Request(url,headers=headers)response=urllib2.urlopen(req)html=response.read()printhtml#上面的loadPage的实现returnhtml大家一定不陌生,需要注意的是多了一个参数self来定义的成员方法python类然后loadPage(self,page)中的page就是我们指定请求的页数最后通过printhtml把page打印到屏幕上然后我们写一个mainfunc测试loadPage方法2.编写一个main函数来测试loadPage方法ifname"""=='main':"""=====================================================================打印'PleasepressEntertostart'raw_input()#DefineaSpiderobjectmySpider=Spider()mySpider.loadpage(1)如果程序正常执行,我们会将内涵段第一页的所有html打印在屏幕代码上.但是我们发现html的中文部分可能会显示乱码。那么我们需要对获取到的网页源码进行简单的处理。defloadPage(self,page):""""""@brief定义一个url方法请求一个网页@parampage要请求的页面@returns返回的页面htmlurl="http://www.neihan8.com/article/list_5_"+str(page)+".html"#User-Agentheaderuser_agent='Mozilla/5.0(compatible;MSIE9.0;WindowsNT6.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')#打印gbk_htmlreturngbk_html注意:对于每个网站,中文的编码是不一样的,所以html.decode('gbk')的写法不通用,根据网站的编码不同。所以我们再执行运行下面的duanzi_spider.py,你会发现前面的中文乱码可以正常显示了第二步:过滤数据接下来我们就获取到了整个页面的数据,不过很多内容我们并不关心,所以接下来步骤我们需要过滤呃。如何过滤,我们使用上一节介绍的正则表达式。首先导入re,然后在我们得到的gbk_html中过滤匹配。我们需要一个匹配规则:我们可以打开内涵段子的网页,右键“查看源代码”,你会惊奇地发现,我们需要的每一个段子的内容都在一个
