[python]糗百热点爬虫
来源:互联网 发布:知乎玲珑邪僧 编辑:程序博客网 时间:2024/05/25 01:36
有小部分的修改,并加入详细注释
#! -*- coding:utf-8 -*-#! usr/bin/python'''#=====================================================# FileName: Spider_qb.py# Describe: 从糗百下载段子并依次播放# Modifier: sunny# Since: 2015-04-20# 变量说明:items,self.pages为list,形式为:# [ ['时间','段子内容','时间','段子内容',...]#一行为一页内容# ......# ['时间','段子内容','时间','段子内容',...] ]#====================================================='''import urllib2import re,chardetimport thread,timeclass 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()
参考此博客
0 0
- [python]糗百热点爬虫
- [python]糗百热点爬虫v2.0【15/4/21更新】
- Python糗百爬虫(精简版)
- python爬虫之糗百段子
- 学习记录:python糗百爬虫
- python自制的糗百爬虫
- 如何科学地蹭热点:用python爬虫获取热门微博评论并进行情感分析
- python爬虫-->爬虫基础
- [爬虫] Python爬虫技巧
- Python爬虫
- python 爬虫
- python 爬虫
- python 爬虫
- python爬虫
- Python爬虫
- Python爬虫
- python 爬虫
- Python爬虫
- 从头思考并查集
- 搭建基于GTID的复制方式
- Halcon-Matlab 图像匹配
- [cocos2dx]在windows7下搭建Cocos2D-X win32开发环境
- STL容器类map学习
- [python]糗百热点爬虫
- 整数转换成罗马数字
- 真假硬币
- kft-activiti-demo学习(目录)
- 云计算的鉴权和租户管理
- Qt数据库之访问 SQLite
- CentOS6.5二进制包安装MySQL5.6
- Qt 访问 MySQL
- 《飞轮效应:数据驱动的企业》