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

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

  在咱們寫爬蟲的時候,首先會想到開多線程,若是使用的語言是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萬左右個網頁數據。運維

  小夥伴是否是很驚訝?網絡百分之九十的流量都是爬蟲給貢獻的,爬蟲給目標網站形成了不小的壓力,爲了不給目標網站形成破壞,不建議開啓過多的併發。異步

相關文章
相關標籤/搜索