很多爬蟲都遇到過爬行速度非常慢的問題,尤其是需要收集大量數(shù)據(jù)的時(shí)候。所以如何提高爬蟲收集的效率是非常關(guān)鍵的,下面我們就來看看如何提高爬蟲收集的效率。
1. 盡量減少網(wǎng)站訪問量。
于單個(gè)爬蟲主要花費(fèi)時(shí)間等待網(wǎng)絡(luò)請求的響應(yīng),因此如果能減少網(wǎng)站訪問量就能減少網(wǎng)站訪問量,這樣既減少了自身的工作量,又減少了網(wǎng)站的壓力和被屏蔽的風(fēng)險(xiǎn)。第一步,優(yōu)化流程,盡可能簡化流程,避免重復(fù)訪問多個(gè)頁面。所以減肥也是一個(gè)很重要的手段。一般是根據(jù)url或id來判斷唯一性,已經(jīng)被抓取的就不會(huì)再繼續(xù)爬了。
2. 分布式爬蟲。
即使用盡各種方法,單臺(tái)機(jī)器在單位時(shí)間內(nèi)能夠抓取的網(wǎng)頁數(shù)量仍然是有限的,而且面對大量的網(wǎng)頁隊(duì)列,計(jì)算時(shí)間仍然很長。這種情況下,必須用機(jī)器來改變時(shí)間,也就是所謂的分布式爬蟲。第一步,分配不是爬行動(dòng)物的本質(zhì),也不是必須的。對于相互獨(dú)立、沒有通信的任務(wù),可以手工劃分任務(wù),然后在多臺(tái)機(jī)器上執(zhí)行,減少每臺(tái)機(jī)器的工作量,加倍耗時(shí)。例如,有200W的網(wǎng)頁需要抓取,5臺(tái)機(jī)器可以抓取40W的不重復(fù)的網(wǎng)頁,因此單機(jī)的耗時(shí)縮短了5倍。
但是,如果有需要通信的情況,比如要爬取的隊(duì)列發(fā)生了變化,那么每次爬取的隊(duì)列都會(huì)發(fā)生變化,即使任務(wù)被劃分,會(huì)有交叉重復(fù),因?yàn)槊颗_(tái)機(jī)器運(yùn)行程序時(shí)的隊(duì)列是不同的——在這種情況下,只能通過分布式,一個(gè)主存儲(chǔ)隊(duì)列,另一個(gè)從,這樣一個(gè)隊(duì)列就可以共享,即使互斥,也不會(huì)被重復(fù)抓取。Scrapy-redis是一個(gè)廣泛使用的分布式爬蟲框架。
這是提高爬蟲收集效率的兩種方法。希望大家能在屏幕前有所收獲。另外,在采集過程中還需要注意目標(biāo)網(wǎng)站的防爬行機(jī)制。當(dāng)然,我們的ip模擬器將永遠(yuǎn)與您同在。