<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        [Python]網絡爬蟲(八):糗事百科的網絡爬蟲(v0.3)源碼及解析(簡化更新)

        來源:懂視網 責編:小采 時間:2020-11-27 14:16:54
        文檔

        [Python]網絡爬蟲(八):糗事百科的網絡爬蟲(v0.3)源碼及解析(簡化更新)

        [Python]網絡爬蟲(八):糗事百科的網絡爬蟲(v0.3)源碼及解析(簡化更新):Q&A:1.為什么有段時間顯示糗事百科不可用?答:前段時間因為糗事百科添加了Header的檢驗,導致無法爬取,需要在代碼中模擬Header。現在代碼已經作了修改,可以正常使用。2.為什么需要單獨新建個線程?答:基本流程是這樣的:爬蟲在后臺新起一個線程,一
        推薦度:
        導讀[Python]網絡爬蟲(八):糗事百科的網絡爬蟲(v0.3)源碼及解析(簡化更新):Q&A:1.為什么有段時間顯示糗事百科不可用?答:前段時間因為糗事百科添加了Header的檢驗,導致無法爬取,需要在代碼中模擬Header?,F在代碼已經作了修改,可以正常使用。2.為什么需要單獨新建個線程?答:基本流程是這樣的:爬蟲在后臺新起一個線程,一
        Q&A:

        1.為什么有段時間顯示糗事百科不可用?

        答:前段時間因為糗事百科添加了Header的檢驗,導致無法爬取,需要在代碼中模擬Header?,F在代碼已經作了修改,可以正常使用。

        2.為什么需要單獨新建個線程?

        答:基本流程是這樣的:爬蟲在后臺新起一個線程,一直爬取兩頁的糗事百科,如果剩余不足兩頁,則再爬一頁。用戶按下回車只是從庫存中獲取最新的內容,而不是上網獲取,所以瀏覽更順暢。也可以把加載放在主線程,不過這樣會導致爬取過程中等待時間過長的問題。

        項目內容:

        用Python寫的糗事百科的網絡爬蟲。

        使用方法:

        新建一個Bug.py文件,然后將代碼復制到里面后,雙擊運行。

        程序功能:

        在命令提示行中瀏覽糗事百科。

        原理解釋:

        首先,先瀏覽一下糗事百科的主頁:http://www.qiushibaike.com/hot/page/1

        可以看出來,鏈接中page/后面的數字就是對應的頁碼,記住這一點為以后的編寫做準備。

        然后,右擊查看頁面源碼:

        603.png

        觀察發現,每一個段子都用div標記,其中class必為content,title是發帖時間,我們只需要用正則表達式將其“扣”出來就可以了。

        明白了原理之后,剩下的就是正則表達式的內容了,可以參照這篇博文:

        http://blog.csdn.net/wxg694175346/article/details/8929576

        運行效果:

        604.png

        # -*- coding: utf-8 -*- 
         
        import urllib2 
        import urllib 
        import re 
        import thread 
        import time 
         
         
        #----------- 加載處理糗事百科 ----------- 
        class Spider_Model: 
         
         def __init__(self): 
         self.page = 1 
         self.pages = [] 
         self.enable = False 
         
         # 將所有的段子都扣出來,添加到列表中并且返回列表 
         def GetPage(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('<div.*?class="content".*?title="(.*?)">(.*?)</div>',unicodePage,re.S) 
         items = [] 
         for item in myItems: 
         # item 中第一個是div的標題,也就是時間 
         # item 中第二個是div的內容,也就是內容 
         items.append([item[0].replace("
        ",""),item[1].replace("
        ","")]) 
         return items 
         
         # 用于加載新的段子 
         def LoadPage(self): 
         # 如果用戶未輸入quit則一直運行 
         while self.enable: 
         # 如果pages數組中的內容小于2個 
         if len(self.pages) < 2: 
         try: 
         # 獲取新的頁面中的段子們 
         myPage = self.GetPage(str(self.page)) 
         self.page += 1 
         self.pages.append(myPage) 
         except: 
         print '無法鏈接糗事百科!' 
         else: 
         time.sleep(1) 
         
         def ShowPage(self,nowPage,page): 
         for items in nowPage: 
         print u'第%d頁' % page , items[0] , items[1] 
         myInput = raw_input() 
         if myInput == "quit": 
         self.enable = False 
         break 
         
         def Start(self): 
         self.enable = True 
         page = self.page 
         
         print u'正在加載中請稍候......' 
         
         # 新建一個線程在后臺加載段子并存儲 
         thread.start_new_thread(self.LoadPage,()) 
         
         #----------- 加載處理糗事百科 ----------- 
         while self.enable: 
         # 如果self的page數組中存有元素 
         if self.pages: 
         nowPage = self.pages[0] 
         del self.pages[0] 
         self.ShowPage(nowPage,page) 
         page += 1 
         
         
        #----------- 程序的入口處 ----------- 
        print u""" 
        --------------------------------------- 
         程序:糗百爬蟲 
         版本:0.3 
         作者:why 
         日期:2014-06-03 
         語言:Python 2.7 
         操作:輸入quit退出閱讀糗事百科 
         功能:按下回車依次瀏覽今日的糗百熱點 
        --------------------------------------- 
        """ 
         
         
        print u'請按下回車瀏覽今日的糗百內容:' 
        raw_input(' ') 
        myModel = Spider_Model() 
        myModel.Start()

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        [Python]網絡爬蟲(八):糗事百科的網絡爬蟲(v0.3)源碼及解析(簡化更新)

        [Python]網絡爬蟲(八):糗事百科的網絡爬蟲(v0.3)源碼及解析(簡化更新):Q&A:1.為什么有段時間顯示糗事百科不可用?答:前段時間因為糗事百科添加了Header的檢驗,導致無法爬取,需要在代碼中模擬Header?,F在代碼已經作了修改,可以正常使用。2.為什么需要單獨新建個線程?答:基本流程是這樣的:爬蟲在后臺新起一個線程,一
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 色综合久久精品亚洲国产| 亚洲高清中文字幕综合网| 国产99视频精品免费专区| 免费一级毛片不卡不收费| 国产99久久亚洲综合精品| 免费A级毛片无码久久版| 亚洲乱码在线播放| 最近中文字幕2019高清免费| 最新亚洲成av人免费看| 一个人看的免费高清视频日本| 国产成人免费全部网站| 男女男精品网站免费观看| 亚洲日韩小电影在线观看| 女同免费毛片在线播放| 亚洲五月激情综合图片区| 国产福利视精品永久免费| 浮力影院亚洲国产第一页| 亚洲成a人无码亚洲成av无码| 永久免费视频网站在线观看| 亚洲熟妇av一区| 成年女人看片免费视频播放器| 国产天堂亚洲精品| 伊人久久亚洲综合| 99国产精品视频免费观看| 2020年亚洲天天爽天天噜| 最近免费中文字幕大全高清大全1| 亚洲精品在线不卡| 在线免费观看国产视频| www.av在线免费观看| 无码乱肉视频免费大全合集| 亚洲午夜理论片在线观看| 亚洲毛片网址在线观看中文字幕| a色毛片免费视频| 亚洲热妇无码AV在线播放| 日本人的色道免费网站| 看亚洲a级一级毛片| 亚洲成在人线av| 精品免费国产一区二区三区| 91国内免费在线视频| 亚洲综合一区二区三区四区五区| 亚洲区不卡顿区在线观看|