大家都知道收集數據是需要時間的,但是我們不能永遠等下去,尤其是需要收集大量數據的時候,所以如何提高爬蟲采集的效率是非常關鍵的。下面我們來看看如何提高爬蟲采集的效率。
1.盡量減少網站訪問。
單個爬蟲主要是花時間等待網絡請求的響應,所以可以減少網站訪問,既減少了自身的工作量,也減少了網站的壓力和被屏蔽的風險。
第一步是優化流程,盡可能精簡。如果某些數據可以在一個網頁而不是多個網頁中獲取,那么只能在一個網頁中獲取。
那么減肥也是一個很重要的手段。一般通過url或者id來判斷唯一性,已經爬的就不會繼續爬了。
2.分布式爬蟲
即使用盡了各種方法,單臺計算機在單位時間內能夠抓取的網頁數量仍然有限,面對大量的網頁隊列,計算時間仍然很長。在這種情況下,必須使用機器來改變時間,也就是所謂的分布式爬蟲。
第一步,分配不是爬行動物的本質,也不是必須的。對于相互獨立、沒有通信的任務,可以手動劃分任務,然后在多臺機器上執行,這樣就減少了每臺機器的工作量,時間消耗翻倍。
比如有200W個網頁需要抓取,5臺機器可以不重復抓取40W個網頁,那么單臺機器的耗時會縮短5倍。
但是如果有通信的需要,比如要爬取的隊列是變化的,那么這個隊列每次爬取都會發生變化,即使任務劃分了,也會有重疊和重復,因為程序運行時每臺機器都有不同的隊列要爬取——這種情況下只能分布,一個主存儲隊列,一個從存儲隊列,這樣一個隊列就可以共享,即使互斥也不會重復爬取。Scrapy-redis是一個廣泛使用的分布式爬蟲框架。
以上介紹了兩種提高爬蟲采集效率的方法。我想大家都知道如何提高收藏效果,在采集的過程中,還要注意目標網站的反抓取機制,動態ip模擬器將永遠與你同在。