#-*- coding: utf-8 -*-
importurllib2importurllibimportreimportthreadimporttime#----------- 加载处理糗事百科 -----------
classSpider_Model:def __init__(self):
self.page= 1self.count= 1self.pages=[]
self.enable=False#将所有的段子都扣出来,添加到列表中并且返回列表
defGetPage(self,page):
myUrl= "http://m.qiushibaike.com/hot/page/" +page
user_agent= 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'headers= { 'User-Agent': user_agent }
req= urllib2.Request(myUrl, headers =headers)
myResponse=urllib2.urlopen(req)
myPage=myResponse.read()#encode的作用是将unicode编码转换成其他编码的字符串
#decode的作用是将其他编码的字符串转换成unicode编码
unicodePage = myPage.decode("utf-8")#找出所有class="content"的div标记
#re.S是任意匹配模式,也就是.可以匹配换行符
#myItems = re.findall('
myItems = re.findall('
items=[]for item inmyItems:#去掉段子中网页相关的内容
#strinfo = re.compile(u'<.>')
#tt = strinfo.sub(u'', item)
#strinfo1 = re.compile(u'^\n*')
#tt = strinfo1.sub(u'', tt)
#strinfo2 = re.compile(u'\n*$')
#tt = strinfo2.sub(u'', tt)
#tt = tt.replace(u'\n',u'')
items.append(item)returnitems#用于加载新的段子
defLoadPage(self):#如果用户未输入quit则一直运行
whileself.enable:#如果pages数组中的内容小于2个
if len(self.pages) < 2:try:#获取新的页面中的段子们
myPage =self.GetPage(str(self.page))
self.page+= 1self.pages.append(myPage)except:print '无法链接糗事百科!'
else:
time.sleep(1)defShowPage(self,nowPage,page):for items innowPage:print u'第%d条\n' %self.count , items
self.count+= 1myInput=raw_input()if myInput == "q":
self.enable=Falsebreak
defStart(self):
self.enable=True
page=self.pageprint u'......正在搜索中......\n'
#新建一个线程在后台加载段子并存储
thread.start_new_thread(self.LoadPage,())#----------- 加载处理糗事百科 -----------
whileself.enable:#如果self的page数组中存有元素
ifself.pages:
nowPage=self.pages[0]delself.pages[0]
self.ShowPage(nowPage,page)
page+= 1
#----------- 程序的入口处 -----------
print u"""---------------------------------------
程序:糗百爬虫
版本:1.0
作者:zz
日期:2016-02-16
语言:Python 2.5
操作:输入'q'退出阅读糗事百科
功能:按下回车依次浏览今日的糗百热点
---------------------------------------"""
print u'请按下回车浏览今日的糗百内容:'raw_input(' ')
myModel=Spider_Model()
myModel.Start()