爬取糗事百科的spider

来源:互联网 发布:mac好用的office软件 编辑:程序博客网 时间:2024/05/21 16:54

个人一直对网络爬虫感兴趣,最近使用python的flask框架开发了一个小型网站(有待改进)以及最近在学习深度学习的开源框架caffe,caffe提供了python接口。借此机会学习了一下python以及利用python开发爬虫。希望后面能够利用自己写的爬虫,爬取一些数据集用于caffe训练。

代码如下:

__author__ = 'JWL'# -*- coding:utf-8 -*-import urllibimport urllib2import reimport threadimport time#嗅事百科爬虫类class BK:#初始化方法,定义一些变量def __init__(self):self.pageIndex = 1self.user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' #初始化headersself.headers = {'User-Agent' : self.user_agent}#存放段子的变量,每一个元素是每一页的段子们self.stories = []#存放程序是否继续运行的变量self.enable = False#传入某一页的索引获得页面代码def  getPage(self,pageIndex):try:url = 'http://www.qiushibaike.com/hot/page/' + str(pageIndex)#构建请求的requestrequest = urllib2.Request(url,headers = self.headers)#利用urlopen获取页面代码response = urllib2.urlopen(request)#将页面转化为UTF-8编码pageCode = response.read().decode('utf-8')return pageCodeexcept urllib2.URLError, e:if hasattr(e,"reason"): print u"连接糗事百科失败,错误原因",e.reason return Nonedef getPageItems(self,pageIndex):pageCode = self.getPage(pageIndex)if not pageCode:print "页面加载失败...."return Nonepattern = re.compile('<div class="author clearfix">.*?href.*?<img src.*?title=.*?<h2>(.*?)</h2>.*?<div class="content">(.*?)</div>.*?<i class="number">(.*?)</i>',re.S)items = re.findall(pattern,pageCode)#用来存储每页的段子们pageStories = []#遍历正则表达式匹配的信息for item in items:replaceBR = re.compile('<br/>')text = re.sub(replaceBR,"\n",item[1])pageStories.append([item[0].strip(),text.strip(),item[2].strip()])return pageStories#加载并提取页面的内容,加入到列表中def loadPage(self):#如果当前未看的页面少于2页,则加载新一页if self.enable == True:if len(self.stories) < 2:#获取新一页pageStories = self.getPageItems(self.pageIndex)#将该页的段子存入到全局的list中if pageStories:self.stories.append(pageStories)#获取完之后页面索引加一,表示下次读取下一页self.pageIndex += 1#调用该方法,每次敲回车打印输出一个段子def getOneStory(self,pageStories,page):#遍历一页的段子for story in pageStories:#等待用户输入input = raw_input()#每当输入回车一次,判断一下是否要加载新页面self.loadPage()#如果输入Q则程序结束if input == "Q":self.enable = Falsereturn print u"第%d页\t发布人:%s\t发布内容:%s\t赞:%s" %(page,story[0],story[1],story[2])#开始方法def  start(self):print u"正在读取糗事百科,按回车查看新段子,Q退出"#使变量为True,程序可以正常运行self.enable = True#先加载一页内容self.loadPage()#局部变量,控制当前读到了第几页nowPage = 0while self.enable:if len(self.stories)>0:pageStories = self.stories[0]#当前读到的页数加一nowPage += 1#将全局list中第一个元素删除del self.stories[0]self.getOneStory(pageStories,nowPage)spider = BK()spider.start()

github地址:https://github.com/jingwanli6666/qiushibaike_spider

0 0
原创粉丝点击