博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python爬虫Scrapy测试
阅读量:5879 次
发布时间:2019-06-19

本文共 3303 字,大约阅读时间需要 11 分钟。

# -*- coding:utf-8 -*-import urllibimport urllib2import reimport threadimport time#糗事百科爬虫类class QSBK:    #初始化方法,定义一些变量    def __init__(self):        self.pageIndex = 1        self.user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'        #初始化headers        self.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)            #构建请求的request            request = urllib2.Request(url,headers = self.headers)            #利用urlopen获取页面代码            response = urllib2.urlopen(request)            #将页面转化为UTF-8编码            pageCode = response.read().decode('utf-8')            return pageCode        except urllib2.URLError, e:            if hasattr(e,"reason"):                print u"连接糗事百科失败,错误原因",e.reason                return None    #传入某一页代码,返回本页不带图片的段子列表    def getPageItems(self,pageIndex):        pageCode = self.getPage(pageIndex)        if not pageCode:            print "页面加载失败...."            return None        pattern = re.compile('
.*?
.*?

(.*?)

.*?.*?
(.*?)', re.S) items = re.findall(pattern,pageCode) #用来存储每页的段子们 pageStories = [] #遍历正则表达式匹配的信息 for item in items: #是否含有图片 haveImg = re.search("img",item[1]) #如果不含有图片,把它加入list中 if not haveImg: replaceBR = re.compile('
') text = re.sub(replaceBR,"\n",item[1]) #item[0]是一个段子的发布者,item[1]是内容,item[2]是发布时间,item[4]是点赞数 pageStories.append([item[0].strip(),text.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 = False return print u"第%d页\t发布人:%s\t内容:%s" %(page,story[0],story[1]) #开始方法 def start(self): print u"正在读取糗事百科,按回车查看新段子,Q退出" #使变量为True,程序可以正常运行 self.enable = True #先加载一页内容 self.loadPage() #局部变量,控制当前读到了第几页 nowPage = 0 while self.enable: if len(self.stories)>0: #从全局list中获取一页的段子 pageStories = self.stories[0] #当前读到的页数加一 nowPage += 1 #将全局list中第一个元素删除,因为已经取出 del self.stories[0] #输出该页的段子 self.getOneStory(pageStories,nowPage)spider = QSBK()spider.start()

 

转载于:https://www.cnblogs.com/wuxl360/p/5570246.html

你可能感兴趣的文章
Redis 通用操作2
查看>>
11. Spring Boot JPA 连接数据库
查看>>
洛谷P2925 [USACO08DEC]干草出售Hay For Sale
查看>>
MapReduce工作原理流程简介
查看>>
那些年追过的......写过的技术博客
查看>>
小米手机解锁bootload教程及常见问题
查看>>
Python内置函数property()使用实例
查看>>
Spring MVC NoClassDefFoundError 问题的解决方法。
查看>>
CentOS 6.9配置网卡IP/网关/DNS命令详细介绍及一些常用网络配置命令(转)
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
C# 解决窗体闪烁
查看>>
CSS魔法堂:Transition就这么好玩
查看>>
【OpenStack】network相关知识学习
查看>>
centos 7下独立的python 2.7环境安装
查看>>
[日常] 算法-单链表的创建
查看>>
前端工程化系列[01]-Bower包管理工具的使用
查看>>
使用 maven 自动将源码打包并发布
查看>>
Spark:求出分组内的TopN
查看>>
Python爬取豆瓣《复仇者联盟3》评论并生成乖萌的格鲁特
查看>>
关于跨DB增量(增、改)同步两张表的数据小技巧
查看>>