爬蟲對自己服務器 CPU,內存和網速的影響


今天無事寫一遍關於爬蟲對計算機的影響,主要是給小白同學普及一下爬蟲的基礎知識。

  在我們寫爬蟲的時候,首先會想到開多線程,如果使用的語言是Python,很不幸,因為Python存在  GIL,在任何時候,CPU內只有一條線程在運行,但是Python的多線程也能提高爬蟲的速度,並且我們用python的多線程去寫爬蟲的時候,速度並不慢,這是為何呢?因為爬蟲是偏向於io的,網絡IO和磁盤io是爬蟲的最大瓶頸,現在CPU的處理速度很快,相對於請求來說,CPU的速度更快。網絡請求需要等待對方服務器的響應,這個過程比較慢。而下載到數據后往自己數據庫插入數據需要等待自己的磁盤響應。那么有沒有一個更好的方法實現爬蟲的並發下載呢?

  答案是 : 有,我們可以使用第三方的框架,比如使用異步框架 gevent,tornado等,或者是Python的多進程+ 異步方法,可以大大的提高我們的下載速度。

  

  直接粘貼兩張圖片,第一種是消耗CPU和內存和帶寬,第三張圖片是多進程使用。

  

                    第一種圖片

 

  

        第二種圖片

 

 

  在爬取某個網站的時候,同時開啟了64個進程,並且是異步的方法,下載速度穩定在700k左右,因為公司運維給網絡限速了,不可能提高網速了,然后是內存消耗是87%,內存是12G,CPU消耗是百分之百,CPU消耗為何這么高呢?主要是數據解析需要消耗CPU和進程切換也需要消耗CPU。一個網頁的大小應該在10k到20k之間,粗略統計一下,一分鍾能下載1750個網頁,包括數據的下載,解析和入庫整個過程。這個下載速度是1750*60分鍾 等於105000,也就是說一個小時是能下載十萬個網頁。

  這個速度怎么樣?我覺得這個下載速度是非常的慢,為何,因為這個網址他封ip了,需要通過代理去訪問他們的服務器,這也是非常耗時的一個過程,只能通過ip池去解決,ip池里面維護了1000左右有效ip,並且有專門的服務去做驗證,可以隨時抽取一個ip去抓取目標網站。理想的狀態是一分鍾抓取3000條數據,一天24小時抓取500萬左右個網頁數據。

  小伙伴是不是很驚訝?網絡百分之九十的流量都是爬蟲給貢獻的,爬蟲給目標網站造成了不小的壓力,為了避免給目標網站造成破壞,不建議開啟過多的並發。

 

 

  


免責聲明!

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



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