
800819103
在線客服,實時響應
qq群
在線客服,實時響應
客服電話
13318873961
現在網頁信息比較多,即使是小的網站數據也不少,更何況大網站,如果想要采集大量數據,爬蟲怎么加快速度采集?
如果還是按照單線爬蟲的采集速度,企業根本沒有時間耗,快速采集數據并挖掘有效信息是企業使用爬蟲的目的,達不到目的,就不需要使用爬蟲了。
其實是有許多方法來加快速度采集的,下面小編就為大家分享一下爬蟲怎么加快速度采集。
一、改變線程數目
假設線程數為n,線程中下載平均用時為td,線程中數據處理部分(純計算)用時為tc。由于單個Python進程只能使用單CPU核心,因此總的數據處理耗時應是各線程tc的累加即n*tc。因為下載是阻塞操作,CPU可以幾乎同時處理所有下載,因此總的下載耗時就近似為td。那么Python爬蟲的下載速度應為:
等式稍作變換后為:
對于特定的網站td為定值(常量),對于特定的數據處理算法tc也近似為定值。所以下載速度的最大值也不會超過1/tc。試想一下,如果線程函數內數據處理部分耗時為0.1秒,那么不管線程數再大,整體的速度也不會超過10個/秒。線程數n的增大的確能夠使得v增大,但是如果tc值較大,n的值達到一定程度后對v的影響就很小了。假設tc = 0.1,td = 3,那么 v = 1/(0.1+3/n)的函數圖象應為如下圖所示:
由圖可以看出當n在100以后對v的影響就不大了。因此不能盲目的增大線程數n。線程數越大消耗的系統資源就越多,同時過多的CPU切換反而會增加整體花費的時間。
二、改變進程數目
如何讓你的爬蟲跑的更快呢?通過上面的分析我們知道單個Python爬蟲進程最大速度為1/tc。如果我們同時啟動m個進程,那么整體的速度就能提高m倍。但是m的值也不是越大越好,因為進程的系統開銷比線程還要大。一般進程數取CPU的核心數的為宜(具體可視實際CPU使用率情況調整)。
如下圖所示,為我們在一4核機器上同時啟動4進程的情況。只啟動一個進程時速度最大僅為13個/秒,同時啟動4個進程,整體的速度就達到約50個/秒。
另外,Python雖然有multiprocessing庫,但是我們實際測試其速度遠沒有真正的多個獨立進程快。因此建議用真正的“多進程”。
多進程的設計增加了程序的開發難度。主要要解決兩大問題:
1.輸入(任務隊列)。多進程要共享一個任務隊列。如果該任務隊列方案支持網絡,那么就很容易把采集系統做成真正的分布式集群采集。
2.輸出。簡單的做法就是直接把數據寫入數據庫,但是在爬蟲程序內頻繁操作數據庫勢必會增加耗時。一個較好的方案是將輸出先寫入消息隊列,然后用一單獨進程來處理消息隊列。
爬蟲怎么加快速度采集?綜上所述,想要加快速度采集可以使用多線程與多進程,二者相比,多進程效果會更好些。