importurllib.requestimporturllib.parseimportreimporttime#糗事百科爬虫类

classQSBK:#初始化方法,定义一些变量

def __init__(self):

self.pageIndex= 1self.user_agent= 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36'self.headers= {'User-Agent': self.user_agent}#存放段子的变量,每个元素是每一页的段子

self.stories =[]#存放程序是否继续运行的变量

self.enable =False#传入某一页的索引获得页面代码

defgetPage(self, pageIndex):try:

url= 'http://www.qiushibaike.com/hot/page/' +str(pageIndex)

request= urllib.request.Request(url, headers =self.headers)

response=urllib.request.urlopen(request)

pageCode= response.read().decode('utf-8','ignore') #这个ignore忽略非法字符 一定要加 不然总报解码错误

returnpageCodeexcepturllib.error.URLError as e:if hasattr(e, "reason"):print(u"连接糗事百科失败,错误原因:", e.reason)returnNone#传入某一页代码,返回本页不断图片的段子列表

defgetPageItems(self, pageIndex):

pageCode=self.getPage(pageIndex)if notpageCode:print(u"页面加载失败....")returnNone

pattern= re.compile('

.*?(.*?).*?

'content">(.*?).*?

(.*?)

(.*?)', re.S)

items=re.findall(pattern, pageCode)#用来存储每页的段子

pageStories =[]for item initems:

haveImg= re.search("img", item[3])if nothaveImg:

replaceBR= re.compile('
')

text= re.sub(replaceBR, "\n", item[1])

pageStories.append([item[0].strip(), text.strip(),item[4].strip()]) #.strip() 用来删除空白符

returnpageStories#加载并提取页面的内容,加入到列表中

defloadPage(self):#如果当前未看的页数少于2页,则加载新一页

if self.enable ==True:if len(self.stories) < 2:#获取新一页

pageStories =self.getPageItems(self.pageIndex)#将该页的段子存放到全局list中

ifpageStories:

self.stories.append(pageStories)#页码加1,下次读取下一页

self.pageIndex += 1

#每次敲回车打印一个段子

defgetOneStory(self,pageStories,page):#遍历一页的段子

for story inpageStories:#等待用户输入

input_v =input()#每当输入回车一次,判断一下是否要加载新页面

self.loadPage()#如果输入Q则程序结束

if input_v == "Q":

self.enable=Falsereturn

print(u"第%d页\t发布人:%s\t赞:%s\n%s" % (page, story[0], story[2],story[1]))#开始方法

defstart(self):print(u"正在读取糗事百科,按回车查看新段子,Q退出")#使变量为True,程序可以正常运行

self.enable =True#先加载一页内容

self.loadPage()#局部变量,控制当前读到2了第几页

nowPage =0whileself.enable:if len(self.stories) >0:#从全局list中获取一页段子

pageStories =self.stories[0]#当前读到的页数加1

nowPage += 1

#删除已经取出的元素

delself.stories[0]#输出该页的段子

self.getOneStory(pageStories,nowPage)

spider=QSBK()

spider.start()

python大神写的代码_【python】抄写大神的糗事百科代码相关推荐

  1. Python爬虫学习笔记 -- 爬取糗事百科

    Python爬虫学习笔记 -- 爬取糗事百科 代码存放地址: https://github.com/xyls2011/python/tree/master/qiushibaike 爬取网址:https ...

  2. python爬取糗事百科

    本次要爬取的是糗事百科,地址如下:http://www.qiushibaike.com/8hr/page/1 1.思路分析: url地址的规律非常明显,一共只有13页url地址 2.确定数据的位置 数 ...

  3. python抓虫_python抓取糗事百科并保存文件的小虫虫代码

    本帖最后由 ivenzlzhang 于 2018-8-21 14:13 编辑 本人python小白,近一个月在学习python编程,发现python强大的第三方库简直是小白的福音. 因此把学习用的知识 ...

  4. python爬虫经典段子_玩转python爬虫之爬取糗事百科段子

    大家好,前面入门已经说了那么多基础知识了,下面我们做几个实战项目来挑战一下吧.那么这次为大家带来,Python爬取糗事百科的小段子的例子. 首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把 ...

  5. python爬虫之糗事百科

    历经1个星期的实践,终于把python爬虫的第一个实践项目完成了,此时此刻,心里有的只能用兴奋来形容,后续将继续加工,把这个做成一个小文件,发给同学,能够在cmd中运行的文件.简化版程序,即单单爬取页 ...

  6. python实现数据爬取——糗事百科爬虫项目

    python实现数据爬取--糗事百科爬虫项目 # urllib.request 请求模块 import urllib.request # re 模块使 Python 语言拥有全部的正则表达式功能. i ...

  7. Python爬虫实战(1):爬取糗事百科段子

    Python爬虫入门(1):综述 Python爬虫入门(2):爬虫基础了解 Python爬虫入门(3):Urllib库的基本使用 Python爬虫入门(4):Urllib库的高级用法 Python爬虫 ...

  8. Python爬虫批量下载糗事百科段子,怀念的天王盖地虎,小鸡炖蘑菇...

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...

  9. JavaScript获取本机浏览器UA助力Python爬取糗事百科首页

    问题背景: 使用Python编写爬虫时,经常会遇到反爬机制,例如网站要求必须使用浏览器访问.就像下面的403错误: 或者下面这种错误信息: 一般来说,这是遇到反爬机制了,对方要求使用浏览器访问.这时可 ...

最新文章

  1. 谷歌Nexus 3开售时间曝光
  2. Py-博客学习50问
  3. python包的init文件_Python模块包中__init__.py文件功能分析
  4. Python 基本语法规则
  5. Java8使用Stream的缺点是调试困难?教你一招你就不会这么认为了
  6. python备份虚拟环境
  7. R7-3 极坐标->直角坐标 (10 分)
  8. PHP socket初探 --- 一些零碎细节的拾漏补缺
  9. 解决svn中“工作副本已经锁定”,或者svn清理失败的解决方法
  10. Python 回归 普通最小二乘法(Ordinary Least Squares)
  11. 软件测试开发人员的价值如何体现?
  12. Windows下配置Squid反向代理服务器
  13. 计算机考研数学一大纲2016,2016年计算机考研大纲原文
  14. duilib开发(十):动态添加控件
  15. 吐血推荐:VBScript教程及语言参考电子书
  16. 043_Unicode对照表九
  17. windows下的gitbub使用入门
  18. 曾抵押房子炒币、与老婆差点离婚! 如今这位80后中科院博士竟...
  19. C# WPF MVVM 实战 – 4 - 善用 IValueConverter
  20. [BZFZ友谊赛]火山喷发

热门文章

  1. 排名怎么查_常见客户SEO问题解答:网站降权了应该怎么处理?
  2. 如何进行自动化PDF测试?这里有真正简单明了的方法
  3. 通达信波段王指标公式主图_通达信波段王主图指标公式
  4. c语言仓库即存储器,计算机基础4
  5. 固件升级_洛达1562a固件升级支持空间音频
  6. 创业负债累累 | 失败了的我还如何翻盘?是天台见! 我的故事还只是从这件事开始...
  7. c语言给定一个单链表输入k,C语言实现单链表(不带头结点)的基本操作
  8. uni 加入图标_uniapp中引入 iconfont
  9. python生成一个数组_在for循环中创建多个数组(Python)
  10. sublime中html自动对齐,sublime text怎么对齐HTML代码