<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
        主站蜘蛛池模板: 歪歪漫画在线观看官网免费阅读| 亚洲精品无码久久久久久| 免费又黄又爽又猛大片午夜| 破了亲妺妺的处免费视频国产 | 亚洲日韩精品无码专区网址| 一级大黄美女免费播放| 亚洲日本中文字幕一区二区三区 | 免费h黄肉动漫在线观看| 精品特级一级毛片免费观看| 国产一卡二卡≡卡四卡免费乱码| 中文字幕无码精品亚洲资源网久久| 最近免费中文字幕高清大全| 亚洲日韩中文字幕天堂不卡| 免费精品国产自产拍在| 亚洲熟女乱色一区二区三区 | 四虎国产精品永久免费网址| 亚洲色欲www综合网| 猫咪www免费人成网站| 亚洲Av无码国产情品久久 | 亚洲乱亚洲乱妇无码麻豆| 成人免费av一区二区三区| 亚洲av之男人的天堂网站 | 色片在线免费观看| 中国china体内裑精亚洲日本| 国内免费高清在线观看| 国产亚洲精品成人久久网站| 亚洲一级黄色视频| 最近2019年免费中文字幕高清| 久久亚洲私人国产精品| 成人啪精品视频免费网站| 男女啪啪免费体验区| 亚洲av无码一区二区乱子伦as| 久久国产精品免费看| 亚洲精品V天堂中文字幕| 在线观看国产区亚洲一区成人 | 国产一级婬片A视频免费观看| 亚洲av无码潮喷在线观看| 在线免费观看a级片| 中文成人久久久久影院免费观看| 亚洲人成在线电影| 国产精品免费看久久久无码|