本篇主要介紹網站數據非常大的采集心得
1. 什么樣的數據才能稱為數據量大:
我覺得這個可能會因為每個人的理解不太一樣,給出的定義 也不相同。我認為定義一個采集網站的數據大小,不僅僅要看這個網站包括的數據量的大小,還應該包括這個網址的采集難度,采集網站的服務器承受能力,采集人員所調配的網絡帶寬和計算機硬件資源等。這里我姑且把一個網站超過一千萬個URL鏈接的叫做數據量大的網站。
2. 數據量大的網站采集方案:
2.1 . 采集需求分析:
作為數據采集工程師,我認為最重要的是要做好數據采集的需求分析,首先要預估這個網址的數據量大小,然后去明確采集哪些數據,有沒有必要去把目標網站的數據都采集下來,因為采集的數據量越多,耗費的時間就越多,需要的資源就越多,對目標網站造成的壓力就越大,數據采集工程師不能為了采集數據,對目標網站造成太大的壓力。原則是盡量少采集數據來滿足自己的需求,避免全站采集。
2.2. 代碼編寫:
因為要采集的網站數據很多,所以要求編寫的代碼做到穩定運行一周甚至一個月以上,所以代碼要足夠的健壯,足夠的強悍。一般要求做到網站不變更模板,程序能一直執行下來。這里有個編程的小技巧,我認為很重要,就是代碼編寫好以后,先去跑一兩個小時,發現程序的一些報錯的地方,修改掉,這樣的前期代碼測試,能保證代碼的健壯性。
2.3 數據存儲:
當數據量有三五千萬的時候,無論是MySQL還是Oracle還是SQL Server,想在一個表里面存儲,已經不太可能了,這個時候可以采用分表來存儲。數據采集完畢,往數據庫插入的時候,可以執行批量插入等策略。保證自己的存儲不受數據庫性能等方面的影響。
2.4 調配的資源:
由於目標網站數據很多,我們免不了要去使用大的帶寬,內存,CPU等資源,這個時候我們可以搞一個分布式爬蟲系統,來合理的管理我們的資源。
3. 爬蟲的道德
對於一些初級的采集工程師,為了更快的采集到數據,往往開了很多的多進程和多線程,后果就是對目標網站造成了dos攻擊,結果是目標網站果斷的升級網站,加入更多的反爬策略,這種對抗對采集工程師也是極其不利的。個人建議下載速度不要超過2M, 多進程或者多線程不要過百。
示例:
要采集的目標網站有四千萬數據,網站的反爬策略是封ip,於是專門找了一台機器,開了二百多個進程去維護ip池,ip池可用的ip在500-1000個,並且保證ip是高度可用的。
代碼編寫完畢后,同是在兩台機器上運行,每天機器開啟的多線程不超過64個,下載速度不超過1M.
個人知識有限,請大牛多多包涵