日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

[Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析

發布時間:2025/3/15 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

更新:感謝評論中朋友的提醒,百度貼吧現在已經改成utf-8編碼了吧,需要把代碼中的decode('gbk')改成decode('utf-8')。


百度貼吧的爬蟲制作和糗百的爬蟲制作原理基本相同,都是通過查看源碼扣出關鍵數據,然后將其存儲到本地txt文件。

源碼下載:

http://download.csdn.net/detail/wxg694175346/6925583

項目內容:

用Python寫的百度貼吧的網絡爬蟲。

使用方法:

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

程序功能:

將貼吧中樓主發布的內容打包txt存儲到本地。

原理解釋:

首先,先瀏覽一下某一條貼吧,點擊只看樓主并點擊第二頁之后url發生了一點變化,變成了:

http://tieba.baidu.com/p/2296712428?see_lz=1&pn=1

可以看出來,see_lz=1是只看樓主,pn=1是對應的頁碼,記住這一點為以后的編寫做準備。

這就是我們需要利用的url。

接下來就是查看頁面源碼。

首先把題目摳出來存儲文件的時候會用到。

可以看到百度使用gbk編碼,標題使用h1標記:

[html]?view plaincopy
  • <h1?class="core_title_txt"?title="【原創】時尚首席(關于時尚,名利,事業,愛情,勵志)">【原創】時尚首席(關于時尚,名利,事業,愛情,勵志)</h1>??

  • 同樣,正文部分用div和class綜合標記,接下來要做的只是用正則表達式來匹配即可。

    運行截圖:

    生成的txt文件:



    [python]?view plaincopy
  • #?-*-?coding:?utf-8?-*-??
  • #---------------------------------------??
  • #???程序:百度貼吧爬蟲??
  • #???版本:0.5??
  • #???作者:why??
  • #???日期:2013-05-16??
  • #???語言:Python?2.7??
  • #???操作:輸入網址后自動只看樓主并保存到本地文件??
  • #???功能:將樓主發布的內容打包txt存儲到本地。??
  • #---------------------------------------??
  • ???
  • import?string??
  • import?urllib2??
  • import?re??
  • ??
  • #-----------?處理頁面上的各種標簽?-----------??
  • class?HTML_Tool:??
  • ????#?用非?貪婪模式?匹配?\t?或者?\n?或者?空格?或者?超鏈接?或者?圖片??
  • ????BgnCharToNoneRex?=?re.compile("(\t|\n|?|<a.*?>|<img.*?>)")??
  • ??????
  • ????#?用非?貪婪模式?匹配?任意<>標簽??
  • ????EndCharToNoneRex?=?re.compile("<.*?>")??
  • ??
  • ????#?用非?貪婪模式?匹配?任意<p>標簽??
  • ????BgnPartRex?=?re.compile("<p.*?>")??
  • ????CharToNewLineRex?=?re.compile("(<br/>|</p>|<tr>|<div>|</div>)")??
  • ????CharToNextTabRex?=?re.compile("<td>")??
  • ??
  • ????#?將一些html的符號實體轉變為原始符號??
  • ????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????
  • ??????
  • class?Baidu_Spider:??
  • ????#?申明相關的屬性??
  • ????def?__init__(self,url):????
  • ????????self.myUrl?=?url?+?'?see_lz=1'??
  • ????????self.datas?=?[]??
  • ????????self.myTool?=?HTML_Tool()??
  • ????????print?u'已經啟動百度貼吧爬蟲,咔嚓咔嚓'??
  • ????
  • ????#?初始化加載頁面并將其轉碼儲存??
  • ????def?baidu_tieba(self):??
  • ????????#?讀取頁面的原始信息并將其從gbk轉碼??
  • ????????myPage?=?urllib2.urlopen(self.myUrl).read().decode("gbk")??
  • ????????#?計算樓主發布內容一共有多少頁??
  • ????????endPage?=?self.page_counter(myPage)??
  • ????????#?獲取該帖的標題??
  • ????????title?=?self.find_title(myPage)??
  • ????????print?u'文章名稱:'?+?title??
  • ????????#?獲取最終的數據??
  • ????????self.save_data(self.myUrl,title,endPage)??
  • ??
  • ????#用來計算一共有多少頁??
  • ????def?page_counter(self,myPage):??
  • ????????#?匹配?"共有<span?class="red">12</span>頁"?來獲取一共有多少頁??
  • ????????myMatch?=?re.search(r'class="red">(\d+?)</span>',?myPage,?re.S)??
  • ????????if?myMatch:????
  • ????????????endPage?=?int(myMatch.group(1))??
  • ????????????print?u'爬蟲報告:發現樓主共有%d頁的原創內容'?%?endPage??
  • ????????else:??
  • ????????????endPage?=?0??
  • ????????????print?u'爬蟲報告:無法計算樓主發布內容有多少頁!'??
  • ????????return?endPage??
  • ??
  • ????#?用來尋找該帖的標題??
  • ????def?find_title(self,myPage):??
  • ????????#?匹配?<h1?class="core_title_txt"?title="">xxxxxxxxxx</h1>?找出標題??
  • ????????myMatch?=?re.search(r'<h1.*?>(.*?)</h1>',?myPage,?re.S)??
  • ????????title?=?u'暫無標題'??
  • ????????if?myMatch:??
  • ????????????title??=?myMatch.group(1)??
  • ????????else:??
  • ????????????print?u'爬蟲報告:無法加載文章標題!'??
  • ????????#?文件名不能包含以下字符:?\?/?:?*???"?<?>?|??
  • ????????title?=?title.replace('\\','').replace('/','').replace(':','').replace('*','').replace('?','').replace('"','').replace('>','').replace('<','').replace('|','')??
  • ????????return?title??
  • ??
  • ??
  • ????#?用來存儲樓主發布的內容??
  • ????def?save_data(self,url,title,endPage):??
  • ????????#?加載頁面數據到數組中??
  • ????????self.get_data(url,endPage)??
  • ????????#?打開本地文件??
  • ????????f?=?open(title+'.txt','w+')??
  • ????????f.writelines(self.datas)??
  • ????????f.close()??
  • ????????print?u'爬蟲報告:文件已下載到本地并打包成txt文件'??
  • ????????print?u'請按任意鍵退出...'??
  • ????????raw_input();??
  • ??
  • ????#?獲取頁面源碼并將其存儲到數組中??
  • ????def?get_data(self,url,endPage):??
  • ????????url?=?url?+?'&pn='??
  • ????????for?i?in?range(1,endPage+1):??
  • ????????????print?u'爬蟲報告:爬蟲%d號正在加載中...'?%?i??
  • ????????????myPage?=?urllib2.urlopen(url?+?str(i)).read()??
  • ????????????#?將myPage中的html代碼處理并存儲到datas里面??
  • ????????????self.deal_data(myPage.decode('gbk'))??
  • ??????????????
  • ??
  • ????#?將內容從頁面代碼中摳出來??
  • ????def?deal_data(self,myPage):??
  • ????????myItems?=?re.findall('id="post_content.*?>(.*?)</div>',myPage,re.S)??
  • ????????for?item?in?myItems:??
  • ????????????data?=?self.myTool.Replace_Char(item.replace("\n","").encode('gbk'))??
  • ????????????self.datas.append(data+'\n')??
  • ??
  • ??
  • ??
  • #--------?程序入口處?------------------??
  • print?u"""#---------------------------------------?
  • #???程序:百度貼吧爬蟲?
  • #???版本:0.5?
  • #???作者:why?
  • #???日期:2013-05-16?
  • #???語言:Python?2.7?
  • #???操作:輸入網址后自動只看樓主并保存到本地文件?
  • #???功能:將樓主發布的內容打包txt存儲到本地。?
  • #---------------------------------------?
  • """??
  • ??
  • #?以某小說貼吧為例子??
  • #?bdurl?=?'http://tieba.baidu.com/p/2296712428?see_lz=1&pn=1'??
  • ??
  • print?u'請輸入貼吧的地址最后的數字串:'??
  • bdurl?=?'http://tieba.baidu.com/p/'?+?str(raw_input(u'http://tieba.baidu.com/p/'))???
  • ??
  • #調用??
  • mySpider?=?Baidu_Spider(bdurl)??
  • mySpider.baidu_tieba()??
  • 總結

    以上是生活随笔為你收集整理的[Python]网络爬虫(九):百度贴吧的网络爬虫(v0.4)源码及解析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。