溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

百萬(wàn)數(shù)據(jù)python爬蟲技巧有哪些

發(fā)布時(shí)間:2021-09-07 11:26:26 來(lái)源:億速云 閱讀:163 作者:小新 欄目:編程語(yǔ)言

這篇文章主要介紹百萬(wàn)數(shù)據(jù)python爬蟲技巧有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

一、百萬(wàn)級(jí)的數(shù)據(jù):目標(biāo)網(wǎng)站的選擇、頁(yè)面分析

1.目標(biāo)網(wǎng)站的選擇
次我選擇的是大名鼎鼎的Stackoverflow, 程序員心中有兩大圣殿。一個(gè)是GitHub里面有很多很多好的庫(kù)和源碼,一個(gè)就是Stackoverflow里面有很多大牛幫忙回答問(wèn)題。我們打開Stackoverflow,然后搜索Python相關(guān)的問(wèn)題:

百萬(wàn)數(shù)據(jù)python爬蟲技巧有哪些

2.頁(yè)面分析
發(fā)現(xiàn)一共有88萬(wàn)多個(gè)問(wèn)題,再看一下頁(yè)面的列表規(guī)律,我們按照每頁(yè)最大顯示50個(gè)問(wèn)題,一共有17776頁(yè),數(shù)據(jù)非常大

百萬(wàn)數(shù)據(jù)python爬蟲技巧有哪些

二、爬蟲的策略:頁(yè)面的爬取,數(shù)據(jù)的存儲(chǔ)
目前為止我還沒(méi)有爬過(guò)這么大的數(shù)據(jù)量,這次看來(lái)必須要用神器了scrapy.其實(shí)在用神器之前,我們自己寫了多并發(fā)的多線程池,我測(cè)了一下速度還可以,爬取500個(gè)數(shù)據(jù)大概有6秒左右,跟scrapy差不多
百萬(wàn)數(shù)據(jù)python爬蟲技巧有哪些

但是考慮到穩(wěn)定性和方便擴(kuò)展性,還是用Scrapy比較方便一些
1.頁(yè)面的爬取
scrapy的文章和資料非常多,基礎(chǔ)知識(shí)這里我就不細(xì)細(xì)講解.scrapy的內(nèi)置功能非常強(qiáng)大,如果玩爬蟲scrapy是必須要學(xué)習(xí)的,使用起來(lái)需要按照它的套路,就像樂(lè)高玩具一樣,一塊一塊的搭起來(lái)就可以.下面我們講一下幾個(gè)關(guān)鍵的點(diǎn):
1).頁(yè)面列表的構(gòu)建
整個(gè)的stackoverflow上關(guān)于Python的問(wèn)題頁(yè)面非常規(guī)整,我們可以很容易的構(gòu)建列表,比如前1000頁(yè)range(1,1000),range(1000,2000):
百萬(wàn)數(shù)據(jù)python爬蟲技巧有哪些

2).單頁(yè)面的爬取
我們用scrapy genspider產(chǎn)生一個(gè)spider文件,我們用這個(gè)文件主要爬取頁(yè)面的內(nèi)容,每個(gè)問(wèn)題的內(nèi)容都非常的規(guī)則,我們用css非常容易可以提?。?br/>

百萬(wàn)數(shù)據(jù)python爬蟲技巧有哪些

我們主要提取問(wèn)題標(biāo)題,問(wèn)題描述,view,vote,answers,提問(wèn)時(shí)間和用戶的名字這7個(gè)維度
百萬(wàn)數(shù)據(jù)python爬蟲技巧有哪些

2.數(shù)據(jù)的存儲(chǔ)
我們需要在items.py里面構(gòu)建一個(gè)存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)類,把這個(gè)7個(gè)特征存起來(lái)

百萬(wàn)數(shù)據(jù)python爬蟲技巧有哪些

然后在上面的spider類里面把頁(yè)面解析的數(shù)據(jù)一一對(duì)于存起來(lái)
item = StackoverflowItem()
item[ ‘desc’] = desc
item[ ‘title’] =title
item[ ‘view’] =view
item[ ‘a(chǎn)nswer’] =answer
item[ ‘vote’] =vote
item[ ‘start’] = start
item[ ‘user’] = user
yield item
三、大規(guī)模的爬取
看起來(lái)好像一切順利,于是我們開始運(yùn)行爬蟲爬取,大概爬取12000個(gè)數(shù)據(jù)左右,IP就會(huì)被封掉,大量的429 錯(cuò)誤代碼會(huì)出現(xiàn).很明顯有反爬的策略.這個(gè)時(shí)候我們的本機(jī)IP已經(jīng)封掉了,這個(gè)時(shí)候想要繼續(xù)爬取,有兩個(gè)辦法:
第一種辦法:用代理IP
1).構(gòu)建一個(gè)隨機(jī)的代理池
網(wǎng)上免費(fèi)的代理IP池很多,我們可以自己本地解析這些網(wǎng)頁(yè)構(gòu)建一個(gè)代理池,存在數(shù)據(jù)庫(kù)里面,也可以訪問(wèn)一個(gè)付費(fèi)的穩(wěn)定的代理.
2).構(gòu)建一個(gè)下載的中間價(jià)
Scrapy強(qiáng)大之處在于,它給了我們很多接口,擴(kuò)展性非常好!基本上爬蟲的方方面面它都內(nèi)置了,類似Django真是居家旅行必備。我們只需要幾行代碼就能搞定

不要忘記了在Setting里面配置一下:
DOWNLOADER_MIDDLEWARES= {
‘stackoverflow.middlewares.RandomProxyMiddleware’: 543,
}
但是代理的ip非常不穩(wěn)定,尤其是免費(fèi)的。而且代理IP爬取的時(shí)間會(huì)比本機(jī)更慢,畢竟中間加了中轉(zhuǎn)
第二種方法:重啟貓繼續(xù)用本機(jī)IP
一般重啟家里的路由器有的時(shí)候會(huì)換本機(jī)的IP地址,因?yàn)楸緳C(jī)的IP地址爬取的速度是最快,然后放慢爬取的速度,加一些delay.
我采用了第二種方法,爬了999頁(yè)大概49950條數(shù)據(jù),并且放慢了速度,大概需要20分鐘左右

百萬(wàn)數(shù)據(jù)python爬蟲技巧有哪些

我們一共有近90萬(wàn)的數(shù)據(jù)需要爬取,如果按照這樣的速度去爬取的話,大概需要7個(gè)小時(shí)才能完全爬取完畢。Scrapy提供了非常完善的異常處理和log分析,即使我們中間爬取出錯(cuò)了,我們依然可以獲得已經(jīng)爬取的數(shù)據(jù).當(dāng)然有條件的話可以放在服務(wù)器上去爬取,速度會(huì)更快.
四、嘗鮮看一下數(shù)據(jù)
數(shù)據(jù)長(zhǎng)啥樣,我們隨機(jī)拿5條出來(lái)看一下,數(shù)據(jù)比較粗糙沒(méi)有經(jīng)過(guò)清洗,里面比較有價(jià)值的是它的view值和answer值,還有時(shí)間和標(biāo)題
百萬(wàn)數(shù)據(jù)python爬蟲技巧有哪些

目前才近10萬(wàn)條的數(shù)據(jù),我們先嘗鮮看一下,里面最火的一個(gè)問(wèn)題被998個(gè)人圍觀:

百萬(wàn)數(shù)據(jù)python爬蟲技巧有哪些

以上是“百萬(wàn)數(shù)據(jù)python爬蟲技巧有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI