[python]糗百热点爬虫v2.0【15/4/21更新】
2015-04-21 23:24
295 查看
刚刚测试了糗百爬虫,结果第二天糗百的源代码就换格式了= =
改了下正则表达式,但是内容中存在的html转码还未匹配,不影响使用
改了下正则表达式,但是内容中存在的html转码还未匹配,不影响使用
#! -*- coding:utf-8 -*- #! usr/bin/python ''' #===================================================== # FileName: Spider_qb.py # Describe: 从糗百下载段子并依次播放 # Modifier: sunny # Since: 2015-04-20 # 变量说明:items,self.pages为list,形式为: # [ ['时间','段子内容','时间','段子内容',...]#一行为一页内容 # ...... # ['时间','段子内容','时间','段子内容',...] ] #===================================================== ''' import urllib2 import re,chardet import thread,time class QiubaiSpider(object): """糗事百科爬虫""" def __init__(self): #page为要显示的页码 #pages存储多页内容 self.page = 1 self.pages = [] self.enable = False #下载1页内容 def GetPage(self,page): myUrl = "http://m.qiushibaike.com/hot/page/" + str(page) user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = {'User-Agent' : user_agent } req = urllib2.Request(myUrl,headers = headers) myPage = urllib2.urlopen(req).read() #添加编解码代码 #...... unicodePage = myPage.decode("utf-8") #利用正则表达式匹配糗百内容, pattern包含两个group #前两个元字符匹配空格等,不是group #.*匹配任意多个字符, ?将其变为非贪婪模式 #re.DOTALL匹配包括'\n'的任意内容 #新的糗百匹配正则 #content = re.compile(r'<div.*?class="content">(.*?)<!--([\s\S]{19})-->(.*)</div>',re.DOTALL) content = re.findall(r'<div.*?class="content">(.*?)<!--([\s\S]{19})(.*?)</div>',unicodePage,re.DOTALL) items = [] #content中pattern匹配的第1个group是title后的时间 #第2个group匹配<div>和</div>之间的内容,即段子内容 for item in content: #将内容中的换行符替换 items.append([ item[0].replace("\n",""),item[1].replace("<br/>","") ]) return items #缓存多页内容,用户未输入quit就一直运行 def LoadPage(self): while self.enable: #当前缓存的内容小于2页就开始加载 if len(self.pages) < 2: try: tempPage = self.GetPage(self.page) self.page += 1 self.pages.append(tempPage) except: print '无法连接糗百!' break else: #缓存充足等待1秒 time.sleep(1) def ShowPage(self,nowPage,page): for items in nowPage: print u'第%d页' % page , items[1] print items[0] myInput = raw_input() if myInput != "": self.enable = False break def Start(self): self.enable = True #新建线程前把页码读出来,否则线程读取后页码值就改变了 page = self.page #后台开新线程缓存糗百内容 #参数1为线程函数,参数2为传递给线程函数的参数此处为空tuple thread.start_new_thread(self.LoadPage,()) while self.enable: #缓存区有内容 if self.pages: #每次取出缓存区最前面一页内容来显示 #取出后删除缓存区对应内容 tempNowPage = self.pages[0] del self.pages[0] self.ShowPage(tempNowPage,page) page += 1 #----------- 程序的入口处 ----------- print u""" #===================================================== # FileName: Spider_qb.py # Describe: 从糗百下载段子并依次播放 # Modifier: sunny # Since: 2015-04-20 # 变量说明:items,self.pages为list,形式为: # [ ['时间','段子内容','时间','段子内容',...]#一行为一页内容 # ...... # ['时间','段子内容','时间','段子内容',...] ] #===================================================== --------------------------------------- 程序:糗百爬虫 版本:0.2 参考:why 语言:Python 2.7 修改: 江前云后 操作:回车阅读,非回车退出 --------------------------------------- """ print u'回车键浏览糗百热点(任意键退出):' raw_input(' ') qb = QiubaiSpider() qb.Start()
相关文章推荐
- [python]糗百热点爬虫
- python爬虫学习之路(3)_ 糗百故事爬取(改)
- 15Python爬虫---爬虫定向爬取腾讯视频网---利刃出击评论
- 华为云照片的爬虫程序更新微信牛牛棋牌平台搭建(python3.6)
- python3 爬虫教学之爬取链家二手房(最下面源码) //以更新源码
- python爬虫学习笔记1——糗百段子爬取
- python 爬虫初识 ,不断更新中
- python爬虫笔记-持续更新
- [python爬虫]爬取贴吧某页美女图片+爬取糗百美女图片
- 一个简单的python爬虫爬取糗百图片
- python爬虫入门教程之糗百图片爬虫代码分享
- python爬虫(15)爬取百度百科字条_精品
- Python实现简单的爬虫获取某刀网的更新数据
- python爬虫之糗百段子
- Python 爬虫实例(15) 爬取 百度百聘(微信公众号)
- Python计算机视觉编程练习15:pyspider爬虫--json语法篇
- 【python】linux下自制简易爬虫开发总结(持续更新中)
- Python开发基础-Day15正则表达式爬虫应用,configparser模块和subprocess模块
- 抓取糗百内容小爬虫(python2.7) 2015最新版