[python]糗百热点爬虫
2015-04-20 16:14
302 查看
有小部分的修改,并加入详细注释
参考此博客
#! -*- 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.findall('<div.*?class="content".*?title="(.*?)">(.*?)</div>',unicodePage,re.DOTALL) items = [] #content中pattern匹配的第1个group是title后的时间 #第2个group匹配<div>和</div>之间的内容,即段子内容 for item in content: #将内容中的换行符替换 items.append([ item[0],item[1].replace("<br/>" and "\n","") ]) 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) pass def ShowPage(self,nowPage,page): for items in nowPage: print u'第%d页' % page , items[0] print items[1] myInput = raw_input() if myInput == "q": 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""" --------------------------------------- 程序:糗百爬虫 版本:0.3 参考:why 语言:Python 2.7 操作:输入q退出阅读 功能:按下回车依次浏览糗百段子 --------------------------------------- """ print u'请按下回车浏览今日的糗百内容(输入q退出):' raw_input(' ') qb = QiubaiSpider() qb.Start()
参考此博客
相关文章推荐
- [python]糗百热点爬虫v2.0【15/4/21更新】
- 如何科学地蹭热点:用python爬虫获取热门微博评论并进行情感分析
- python爬虫入门教程之糗百图片爬虫代码分享
- 抓取糗百内容小爬虫(python2.7) 2015最新版
- [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)
- [Python爬虫] Selenium爬取新浪微博移动端热点话题及评论 (下)
- python爬虫入门教程之糗百图片爬虫代码分享
- [python爬虫]爬取贴吧某页美女图片+爬取糗百美女图片
- python爬虫爬取糗百成人图片单线程版本
- python爬虫学习之路(3)_ 糗百故事爬取(改)
- 糗百的HTML更改后的python爬虫,2016,7,5 总计
- python爬虫之糗百段子
- python爬虫爬取糗百成人图片多线程版本
- python爬虫学习——爬取糗百页面段子
- Python爬虫抓取糗百的图片,并存储在本地文件夹
- python自制的糗百爬虫
- python爬虫学习(2)__抓取糗百段子,与存入mysql数据库
- 一个简单的python爬虫爬取糗百图片
- Python爬虫——糗百