• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答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。現在代碼已經作了修改,可以正常使用。2.為什么需要單獨新建個線程?答:基本流程是這樣的:爬蟲在后臺新起一個線程,一
    Q&A:

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

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

    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。現在代碼已經作了修改,可以正常使用。2.為什么需要單獨新建個線程?答:基本流程是這樣的:爬蟲在后臺新起一個線程,一
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 麻豆精品久久久一区二区| 四虎最新永久在线精品免费| 国产女人精品视频国产灰线| 国产亚洲精品无码专区| 国产精品爱啪在线线免费观看| 午夜国产精品无套| 国产精品男男视频一区二区三区 | 久久亚洲精品无码AV红樱桃| 国产在线91精品入口| 免费视频精品一区二区三区| 国产精品日韩AV在线播放| 亚洲婷婷国产精品电影人久久| 国产欧美精品专区一区二区| 久久综合九色综合精品| 国产成人精品亚洲日本在线| 亚洲av午夜福利精品一区| 亚洲精品国产电影| 无码国模国产在线无码精品国产自在久国产 | 中文字幕精品一区影音先锋| 500av大全导航精品| 日韩精品久久无码人妻中文字幕| 亚洲精品宾馆在线精品酒店| 久久这里只有精品视频99| 国产精品亚洲综合一区| 国产精品1024在线永久免费| 91精品国产福利在线观看麻豆 | 久久久久国产成人精品亚洲午夜 | 亚洲精品成人无码中文毛片不卡| 久久夜色撩人精品国产| 久久精品亚洲欧美日韩久久| 国产精品网址在线观看你懂的| 91亚洲国产成人久久精品| 亚洲国产精品久久久久| 亚洲精品自产拍在线观看动漫| 精品久久久久久中文字幕| 国产成人精品免费视| 久久99国产精品二区不卡| 欧美亚洲国产成人精品| 亚洲无删减国产精品一区| 成人精品一区二区三区| 国产精品成人无码久久久久久|