爬蟲 大規模數據 采集心得和示例


 本篇主要介紹網站數據非常大的采集心得

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.

 

 

個人知識有限,請大牛多多包涵


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM