本篇主要介紹網站數據很是大的採集心得數據庫
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.
我的知識有限,請大牛多多包涵