亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

[Python]網(wǎng)絡(luò)爬蟲(chóng)(八):糗事百科的網(wǎng)絡(luò)爬蟲(chóng)(

系統(tǒng) 2145 0

項(xiàng)目?jī)?nèi)容:

用Python寫(xiě)的糗事百科的網(wǎng)絡(luò)爬蟲(chóng)。

使用方法:

新建一個(gè)Bug.py文件,然后將代碼復(fù)制到里面后,雙擊運(yùn)行。

程序功能:

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

原理解釋?zhuān)?

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

可以看出來(lái),鏈接中page/后面的數(shù)字就是對(duì)應(yīng)的頁(yè)碼,記住這一點(diǎn)為以后的編寫(xiě)做準(zhǔn)備。

然后,右擊查看頁(yè)面源碼:

[Python]網(wǎng)絡(luò)爬蟲(chóng)(八):糗事百科的網(wǎng)絡(luò)爬蟲(chóng)(v0.2)源碼及解析

觀察發(fā)現(xiàn),每一個(gè)段子都用div標(biāo)記,其中class必為content,title是發(fā)帖時(shí)間,我們只需要用正則表達(dá)式將其“扣”出來(lái)就可以了。

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

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


運(yùn)行效果

[Python]網(wǎng)絡(luò)爬蟲(chóng)(八):糗事百科的網(wǎng)絡(luò)爬蟲(chóng)(v0.2)源碼及解析



    # -*- coding: utf-8 -*-
#---------------------------------------
#   程序:糗百爬蟲(chóng)
#   版本:0.2
#   作者:why
#   日期:2013-05-15
#   語(yǔ)言:Python 2.7
#   操作:輸入quit退出閱讀糗事百科
#   功能:按下回車(chē)依次瀏覽今日的糗百熱點(diǎn)
#   更新:解決了命令提示行下亂碼的問(wèn)題
#---------------------------------------
 
import urllib2
import urllib
import re
import thread
import time

#----------- 處理頁(yè)面上的各種標(biāo)簽 -----------
class HTML_Tool:
    # 用非 貪婪模式 匹配 \t 或者 \n 或者 空格 或者 超鏈接 或者 圖片
    BgnCharToNoneRex = re.compile("(\t|\n| |<a.*?>|<img.*?>)")
    
    # 用非 貪婪模式 匹配 任意<>標(biāo)簽
    EndCharToNoneRex = re.compile("<.*?>")

    # 用非 貪婪模式 匹配 任意<p>標(biāo)簽
    BgnPartRex = re.compile("<p.*?>")
    CharToNewLineRex = re.compile("(<br/>|</p>|<tr>|<div>|</div>)")
    CharToNextTabRex = re.compile("<td>")

    # 將一些html的符號(hào)實(shí)體轉(zhuǎn)變?yōu)樵挤?hào)
    replaceTab = [("<","<"),(">",">"),("&","&"),("&","\""),(""," ")]
    
    def Replace_Char(self,x):
        x = self.BgnCharToNoneRex.sub("",x)
        x = self.BgnPartRex.sub("\n    ",x)
        x = self.CharToNewLineRex.sub("\n",x)
        x = self.CharToNextTabRex.sub("\t",x)
        x = self.EndCharToNoneRex.sub("",x)

        for t in self.replaceTab:
            x = x.replace(t[0],t[1])
        return x
#----------- 處理頁(yè)面上的各種標(biāo)簽 -----------


#----------- 加載處理糗事百科 -----------
class HTML_Model:
    
    def __init__(self):
        self.page = 1
        self.pages = []
        self.myTool = HTML_Tool()
        self.enable = False

    # 將所有的段子都扣出來(lái),添加到列表中并且返回列表
    def GetPage(self,page):
        myUrl = "http://m.qiushibaike.com/hot/page/" + page
        myResponse  = urllib2.urlopen(myUrl)
        myPage = myResponse.read()
        #encode的作用是將unicode編碼轉(zhuǎn)換成其他編碼的字符串
        #decode的作用是將其他編碼的字符串轉(zhuǎn)換成unicode編碼
        unicodePage = myPage.decode("utf-8")

        # 找出所有class="content"的div標(biāo)記
        #re.S是任意匹配模式,也就是.可以匹配換行符
        myItems = re.findall('<div.*?class="content".*?title="(.*?)">(.*?)</div>',unicodePage,re.S)
        items = []
        for item in myItems:
            # item 中第一個(gè)是div的標(biāo)題,也就是時(shí)間
            # item 中第二個(gè)是div的內(nèi)容,也就是內(nèi)容
            items.append([item[0].replace("\n",""),item[1].replace("\n","")])
        return items

    # 用于加載新的段子
    def LoadPage(self):
        # 如果用戶未輸入quit則一直運(yùn)行
        while self.enable:
            # 如果pages數(shù)組中的內(nèi)容小于2個(gè)
            if len(self.pages) < 2:
                try:
                    # 獲取新的頁(yè)面中的段子們
                    myPage = self.GetPage(str(self.page))
                    self.page += 1
                    self.pages.append(myPage)
                except:
                    print '無(wú)法鏈接糗事百科!'
            else:
                time.sleep(1)
        
    def ShowPage(self,q,page):
        for items in q:
            print u'第%d頁(yè)' % page , items[0]
            print self.myTool.Replace_Char(items[1])
            myInput = raw_input()
            if myInput == "quit":
                self.enable = False
                break
        
    def Start(self):
        self.enable = True
        page = self.page

        print u'正在加載中請(qǐng)稍候......'
        
        # 新建一個(gè)線程在后臺(tái)加載段子并存儲(chǔ)
        thread.start_new_thread(self.LoadPage,())
        
        #----------- 加載處理糗事百科 -----------
        while self.enable:
            # 如果self的page數(shù)組中存有元素
            if self.pages:
                nowPage = self.pages[0]
                del self.pages[0]
                self.ShowPage(nowPage,page)
                page += 1


#----------- 程序的入口處 -----------
print u"""
---------------------------------------
   程序:糗百爬蟲(chóng)
   版本:0.1
   作者:why
   日期:2013-05-15
   語(yǔ)言:Python 2.7
   操作:輸入quit退出閱讀糗事百科
   功能:按下回車(chē)依次瀏覽今日的糗百熱點(diǎn)
---------------------------------------
"""


print u'請(qǐng)按下回車(chē)瀏覽今日的糗百內(nèi)容:'
raw_input(' ')
myModel = HTML_Model()
myModel.Start()

  

[Python]網(wǎng)絡(luò)爬蟲(chóng)(八):糗事百科的網(wǎng)絡(luò)爬蟲(chóng)(v0.2)源碼及解析


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 天天夜夜爽 | 国产免费区 | 亚洲欧美另类在线视频 | 日韩香蕉视频 | 亚洲色视频在线播放网站 | 久久夜色精品国产噜噜小说 | 99热久久只有精品99只有精品 | 久久精品欧美日韩精品 | 欧美日韩国产一区二区三区播放 | 国产精品人成在线播放新网站 | 元龙第三季免费观看 | 日韩字幕一中文在线综合 | 中文字幕精品亚洲无线码二区 | 在线看片777av免费观看 | 99热最新在线观看 | 国产亚洲玖玖玖在线观看 | 欧美一区二区在线观看免费网站 | 伊人久久大香 | 98色花堂永久地址国产精品 | 久久咪咪| 一级毛片特级毛片免费的 | 久久国产精品免费专区 | 欧美污视频网站 | 国产亚洲欧美另类一区二区三区 | 男人资源在线观看 | 手机看片国产永久1204 | 久久毛片免费看 | 日本激情视频一区二区三区 | 天天骑夜夜操 | 色欧洲 | 久久不射影院 | 越南黄色录像 | 日韩一级精品视频在线观看 | 午夜精品久久久久久99热 | 人做人爱视频欧美在线观看 | www.黄视频 | 寡妇一级a毛片免费播放 | 欧美亚洲国产精品久久 | 国产在线欧美日韩一区二区 | 国产高清狼人香蕉在线观看 | 国产一区二区三区免费播放 |