如何提高爬蟲(chóng)采集的效率?大家都知道收集數(shù)據(jù)需要時(shí)間,但是我們不能一直等,尤其是需要收集大量數(shù)據(jù)的時(shí)候。所以如何提高爬蟲(chóng)采集的效率是非常關(guān)鍵的。下面帶大家了解一下如何提高爬蟲(chóng)采集效率。
1.盡量減少網(wǎng)站訪問(wèn)量。
單個(gè)爬蟲(chóng)主要是花時(shí)間等待網(wǎng)絡(luò)請(qǐng)求的響應(yīng),所以能減少網(wǎng)站訪問(wèn)就減少網(wǎng)站訪問(wèn),既減少了自身的工作量,也減少了網(wǎng)站的壓力和被屏蔽的風(fēng)險(xiǎn)。
第一步,優(yōu)化流程,盡可能精簡(jiǎn)流程。如果有些數(shù)據(jù)可以在一個(gè)網(wǎng)頁(yè)而不是多個(gè)網(wǎng)頁(yè)中獲取,那么只能在一個(gè)網(wǎng)頁(yè)中獲取。
那么減肥也是一個(gè)非常重要的手段。一般根據(jù)url或者id來(lái)判斷唯一性,已經(jīng)爬的就不會(huì)繼續(xù)爬了。
2.分布式爬蟲(chóng)
即使用盡了各種方法,單位時(shí)間內(nèi)單機(jī)能夠抓取的網(wǎng)頁(yè)數(shù)量仍然有限,面對(duì)大量的網(wǎng)頁(yè)隊(duì)列,可計(jì)算的時(shí)間仍然很長(zhǎng)。在這種情況下,必須使用機(jī)器來(lái)改變時(shí)間,這就是所謂的分布式爬蟲(chóng)。
第一步,分發(fā)不是爬蟲(chóng)的本質(zhì),也不是必須的。對(duì)于相互獨(dú)立,沒(méi)有通信的任務(wù),可以手動(dòng)劃分任務(wù),然后在多臺(tái)機(jī)器上執(zhí)行,減少每臺(tái)機(jī)器的工作量,耗時(shí)會(huì)翻倍。
比如有200W的網(wǎng)頁(yè)要抓取,5臺(tái)機(jī)器可以抓取不重復(fù)的40W的網(wǎng)頁(yè),那么單臺(tái)機(jī)器的耗時(shí)就縮短了5倍。
但是如果有需要通信的情況,比如要爬取的隊(duì)列是變化的,那么這個(gè)隊(duì)列每次爬取都會(huì)發(fā)生變化,即使任務(wù)被劃分,也會(huì)出現(xiàn)交叉重復(fù),因?yàn)槌绦蜻\(yùn)行時(shí)每臺(tái)機(jī)器都有不同的隊(duì)列要爬取——這種情況下只能通過(guò)分布式,一個(gè)主存儲(chǔ)隊(duì)列,另一個(gè)從,這樣一個(gè)隊(duì)列就可以共享,即使互斥也不會(huì)重復(fù)爬取。Scrapy-redis是一個(gè)廣泛使用的分布式爬蟲(chóng)框架。
以上介紹了如何提高爬蟲(chóng)采集效率的兩種方法。想必大家都知道如何提高收藏效果。在采集的過(guò)程中,還要注意目標(biāo)網(wǎng)站的反抓取機(jī)制。ip模擬器代理IP會(huì)一直陪著你。