[python]糗百熱點爬蟲

來源:互聯網
上載者:User

標籤: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]糗百熱點爬蟲

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.