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

零基礎(chǔ)寫python爬蟲之抓取百度貼吧并存儲(chǔ)到本地txt文件改進(jìn)版

系統(tǒng) 2372 0

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

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

用Python寫的百度貼吧的網(wǎng)絡(luò)爬蟲。

使用方法:

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

程序功能:

將貼吧中樓主發(fā)布的內(nèi)容打包txt存儲(chǔ)到本地。

原理解釋:

首先,先瀏覽一下某一條貼吧,點(diǎn)擊只看樓主并點(diǎn)擊第二頁之后url發(fā)生了一點(diǎn)變化,變成了:
http://tieba.baidu.com/p/2296712428?see_lz=1&pn=1
可以看出來,see_lz=1是只看樓主,pn=1是對(duì)應(yīng)的頁碼,記住這一點(diǎn)為以后的編寫做準(zhǔn)備。
這就是我們需要利用的url。
接下來就是查看頁面源碼。
首先把題目摳出來存儲(chǔ)文件的時(shí)候會(huì)用到。
可以看到百度使用gbk編碼,標(biāo)題使用h1標(biāo)記:

復(fù)制代碼 代碼如下:

【原創(chuàng)】時(shí)尚首席(關(guān)于時(shí)尚,名利,事業(yè),愛情,勵(lì)志)

?

同樣,正文部分用div和class綜合標(biāo)記,接下來要做的只是用正則表達(dá)式來匹配即可。
運(yùn)行截圖:

零基礎(chǔ)寫python爬蟲之抓取百度貼吧并存儲(chǔ)到本地txt文件改進(jìn)版_第1張圖片

生成的txt文件:

零基礎(chǔ)寫python爬蟲之抓取百度貼吧并存儲(chǔ)到本地txt文件改進(jìn)版_第2張圖片

復(fù)制代碼 代碼如下:

# -*- coding: utf-8 -*-?
#---------------------------------------?
#?? 程序:百度貼吧爬蟲?
#?? 版本:0.5?
#?? 作者:why?
#?? 日期:2013-05-16?
#?? 語言:Python 2.7?
#?? 操作:輸入網(wǎng)址后自動(dòng)只看樓主并保存到本地文件?
#?? 功能:將樓主發(fā)布的內(nèi)容打包txt存儲(chǔ)到本地。?
#---------------------------------------?
??
import string?
import urllib2?
import re?
?
#----------- 處理頁面上的各種標(biāo)簽 -----------?
class HTML_Tool:?
??? # 用非 貪婪模式 匹配 \t 或者 \n 或者 空格 或者 超鏈接 或者 圖片?
??? BgnCharToNoneRex = re.compile("(\t|\n| | | )")?
?????
??? # 用非 貪婪模式 匹配 任意<>標(biāo)簽?
??? EndCharToNoneRex = re.compile("<.*?>")?
?
??? # 用非 貪婪模式 匹配 任意

標(biāo)簽?
??? BgnPartRex = re.compile(" ")?
??? CharToNewLineRex = re.compile("(
|

||
|
)")?
??? CharToNextTabRex = re.compile("")?
?
??? # 將一些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???
?????
class Baidu_Spider:?
??? # 申明相關(guān)的屬性?
??? def __init__(self,url):???
??????? self.myUrl = url + '?see_lz=1'?
??????? self.datas = []?
??????? self.myTool = HTML_Tool()?
??????? print u'已經(jīng)啟動(dòng)百度貼吧爬蟲,咔嚓咔嚓'?
???
??? # 初始化加載頁面并將其轉(zhuǎn)碼儲(chǔ)存?
??? def baidu_tieba(self):?
??????? # 讀取頁面的原始信息并將其從gbk轉(zhuǎn)碼?
??????? myPage = urllib2.urlopen(self.myUrl).read().decode("gbk")?
??????? # 計(jì)算樓主發(fā)布內(nèi)容一共有多少頁?
??????? endPage = self.page_counter(myPage)?
??????? # 獲取該帖的標(biāo)題?
??????? title = self.find_title(myPage)?
??????? print u'文章名稱:' + title?
??????? # 獲取最終的數(shù)據(jù)?
??????? self.save_data(self.myUrl,title,endPage)?
?
??? #用來計(jì)算一共有多少頁?
??? def page_counter(self,myPage):?
??????? # 匹配 "共有 12 頁" 來獲取一共有多少頁?
??????? myMatch = re.search(r'class="red">(\d+?)', myPage, re.S)?
??????? if myMatch:???
??????????? endPage = int(myMatch.group(1))?
??????????? print u'爬蟲報(bào)告:發(fā)現(xiàn)樓主共有%d頁的原創(chuàng)內(nèi)容' % endPage?
??????? else:?
??????????? endPage = 0?
??????????? print u'爬蟲報(bào)告:無法計(jì)算樓主發(fā)布內(nèi)容有多少頁!'?
??????? return endPage?
?
??? # 用來尋找該帖的標(biāo)題?
??? def find_title(self,myPage):?
??????? # 匹配

xxxxxxxxxx

找出標(biāo)題?
??????? myMatch = re.search(r' (.*?)', myPage, re.S)?
??????? title = u'暫無標(biāo)題'?
??????? if myMatch:?
??????????? title? = myMatch.group(1)?
??????? else:?
??????????? print u'爬蟲報(bào)告:無法加載文章標(biāo)題!'?
??????? # 文件名不能包含以下字符: \ / : * ? " < > |?
??????? title = title.replace('\\','').replace('/','').replace(':','').replace('*','').replace('?','').replace('"','').replace('>','').replace('<','').replace('|','')?
??????? return title?
?
??? # 用來存儲(chǔ)樓主發(fā)布的內(nèi)容?
??? def save_data(self,url,title,endPage):?
??????? # 加載頁面數(shù)據(jù)到數(shù)組中?
??????? self.get_data(url,endPage)?
??????? # 打開本地文件?
??????? f = open(title+'.txt','w+')?
??????? f.writelines(self.datas)?
??????? f.close()?
??????? print u'爬蟲報(bào)告:文件已下載到本地并打包成txt文件'?
??????? print u'請(qǐng)按任意鍵退出...'?
??????? raw_input();?
?
??? # 獲取頁面源碼并將其存儲(chǔ)到數(shù)組中?
??? def get_data(self,url,endPage):?
??????? url = url + '&pn='?
??????? for i in range(1,endPage+1):?
??????????? print u'爬蟲報(bào)告:爬蟲%d號(hào)正在加載中...' % i?
??????????? myPage = urllib2.urlopen(url + str(i)).read()?
??????????? # 將myPage中的html代碼處理并存儲(chǔ)到datas里面?
??????????? self.deal_data(myPage.decode('gbk'))?
?????????????
??? # 將內(nèi)容從頁面代碼中摳出來?
??? def deal_data(self,myPage):?
??????? myItems = re.findall('id="post_content.*?>(.*?)
',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
#?? 操作:輸入網(wǎng)址后自動(dòng)只看樓主并保存到本地文件
#?? 功能:將樓主發(fā)布的內(nèi)容打包txt存儲(chǔ)到本地。
#---------------------------------------
"""?
# 以某小說貼吧為例子?
# bdurl = 'http://tieba.baidu.com/p/2296712428?see_lz=1&pn=1'?
?
print u'請(qǐng)輸入貼吧的地址最后的數(shù)字串:'?
bdurl = 'http://tieba.baidu.com/p/' + str(raw_input(u'http://tieba.baidu.com/p/'))??
?
#調(diào)用?
mySpider = Baidu_Spider(bdurl)?
mySpider.baidu_tieba()?

以上就是改進(jìn)之后的抓取百度貼吧的全部代碼了,非常的簡(jiǎn)單實(shí)用吧,希望能對(duì)大家有所幫助


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

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

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

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

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 欧美一级特黄aaa大片 | 国内精品伊人久久久影视 | 亚洲狠狠操 | 成人精品免费视频 | 青青爽国产手机在线观看免费 | 欧美精品一区二区三区久久 | 一级毛片中文字幕 | 奇米视频第四色 | 欧美xxx网站 | 久操视频在线免费观看 | 欧美激情在线播放一区二区 | 久久99国产乱子伦精品免 | 亚洲国产第一区 | 欧美在线性爱视频 | 日本伊人精品一区二区三区 | 久久毛片免费 | 成人免费视频一区 | 久久国产香蕉一区精品 | 久久精品综合一区二区三区 | 伊色综合久久之综合久久 | a在线观看视频 | 欧美精品福利在线视频 | 国产高清一区二区三区四区 | 日韩中文字幕在线免费观看 | 色悠综合 | 色吧综合| 国产二区三区 | 欧美日本综合 | 亚洲免费视频在线 | 欧美日日射 | 国产一在线精品一区在线观看 | 亚洲一级生活片 | 97视屏| 免费视频网站一级人爱视频 | 欧美aⅴ| 中文字幕在线日韩 | 中文字幕在线影院 | 亚洲欧美日韩在线不卡中文 | jiucao视频在线观看 | 久久这里只精品热在线8 | 色综合久久六月婷婷中文字幕 |