標籤:python 爬蟲
有小部分的修改,並加入詳細注釋
#! -*- 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") #利用Regex匹配糗百內容, 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]糗百熱點爬蟲