分布式爬蟲部署,爬蟲需要什么樣的服務器配置,現在爬蟲崗位都要會這個


####

做分布式爬蟲和搜索引擎對於服務器配置有什么要求?

實驗室要做主題爬蟲,附帶簡單的搜索查詢功能,現在要租用10~20台服務器,不知道什么配置好。
我們之前使用了三台服務器(租用的阿里雲),用nutch1.7+hdfs爬取8000個URL(兩層深度)用了兩個多小時,第三層達到了40萬用了3天還沒完全爬完,感覺很慢。
服務器配置如下:
- 服務器A:主節點CPU 4核,內存32G,20Mbps(峰值)公網帶寬(按流量)
- 服務器B,C:CPU 1核,2G內存,1Mbps公網帶寬(固定帶寬)
其中服務器A既做主節點又做從節點,服務器B,C只做從節點。
我有幾點困惑:
1.制約爬取速度的,是帶寬還是cpu的處理能力?我看任務日志,在nutch流程中fetch(連接並下載網頁)這一步耗時最長,占據了絕大部分時間,是不是意味着帶寬是主要瓶頸?
2.關於一台2核4G1M的配置和2台1核2G1M的配置,哪個更好?為什么?(阿里雲的阿里雲推薦配置https://www.aliyun.com/easybuy)
3.如果租用10~20台服務器,配置如何選擇?使用標准配置還是加帶寬,帶寬如何選擇

####

首先,最重要的一點,你需要一點Money。大概多少呢?那你得先搞清楚Money是用來干啥的。一是用來租雲服務器;二是用來買代理。雲服務器的用途顯而易見;代理則是用來動態切換IP,避免被封。好,假設我們需要不間斷爬一周,帶寬1M,數據盤100G。阿里雲,1C1G實例來一個,ecs.t5-lc1m1.small,關了公網IP,¥24.36一周;(同配置t5一周18.48)IP代理,快代理私密代理均勻提取,3~5分鍾 * 2500個/天,¥120一周。然后稍稍改改代碼,關掉延時,扔上服務器跑唄。

#####

1. 買一個vps。通過web方式,給vps裝上操作系統,如ubuntu。這個供應商會有專門教程。2. 用ssh 登錄到vps上,然后把你的代碼放上去。然后運行“nohup python ./youcode.py &”,於是你的crawler就會持續運行下去。將轉到的數據存在文件里,這個是你代碼里寫的。3. 退出ssh。過了幾天幾個星期,ssh登錄上去看看抓了多少。然后scp回自己的電腦分析。

####

頁面爬取總數已經確定(30w±),接下來需要確定的是:頁面每天都需要爬一遍還是說每天只爬其中某一部分即可。這里我們以最大上限來假設,每天爬30w頁面(假設已經考慮了目標的反爬機制、代理池什么的都已經弄好),那么需要測算的就是單位時間單核多線程的正常工作效率是多少(能爬多少頁面)。也即:a.不限網速下,單位內存及CPU最高使用率下能夠爬多少個頁面,設為N。b.額定網速下,內存及CPU有閑置資源時能夠爬多少個頁面,設為M。若基於M/N的爬取速度,都能滿足每天爬30w的需求,就可以用b假設的網速,a假設的硬件配置。這里你可以選擇彈性雲,先用最小配置測試,若不滿足需求,逐漸增加配置。

###

記得選個可以換ip的雲主機,因為ip可能被封。地理位置選距離你的抓取對象物理距離近的。選小配置的,不夠用擴容就行。

###

https://zhuanlan.zhihu.com/p/89548664

 

 

###

需要一個單獨的redis服務器

安卓redis

啟動redis,

驗證一下redis是可以連接的,

###

redis 搭建完

接着我們來搭建數據庫的服務器

把 MongoDB 給裝上

先連接到數據庫的服務器上

下載 mongoDB

創建個 db 文件夾

開啟 mongodb
這里順便把 bind_ip 設置一下

這樣才能被遠程訪問

使用本地連接試試,驗證可以連接數據庫,

#####

接着我們需要在
爬蟲服務器安裝 Python3 環境

slave-02 和 slave-03 服務器

同上安裝 python3

ok
環境搭起來了

####

我們把它改成適用分布式的

將 Pipeline 中的數據庫地址配置成
我們創建的 mongodb 數據庫地址

接着在 setting 中配置
redis 調度和去重

再設置一下延遲訪問

設置delay有起碼兩個好處, 一個是對被爬對象表示禮貌, 另一個是爬的太快,很多服務器會封ip,或限制訪問。

 

搞完了之后

將虛擬環境中的庫打包一下,pip freeze > requirement.txt

接着把項目

都扔到爬蟲服務器上去

連接到爬蟲服務器

可以看到剛剛傳來的文件

把剛剛在虛擬環境中
生成的第三方庫列表

在服務器上一頓安裝


其它兩台爬蟲服務器

和上面一樣安裝所需要的庫

都安裝完之后

就終於可以都 TM 跑起來了

#####

4台機器開始一頓爬取

可以看到 mongodb 都監聽到了
這幾台服務器的連接了

我們連到 redis 看看

可以看到scrapy-redis生成的鍵

可以看到

redis 在調度着請求的消息隊列
以及過濾重復的請求

再連接到 mongodb 看看

統計一下爬取到的數據,發現數據都是增加的,

###

ok
以上就是分布式爬蟲的
搭建及部署的過程了

當然了

數據庫還可以搭建一下集群
數據庫之間的連接最好設置賬戶
進行安全訪問等

主要還是讓你了解這個過程中

分布式爬蟲的搭建和使用
以及體會它的可擴展性和高效性

###

 

 

######


免責聲明!

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



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