Python爬蟲教程-34-分散式爬蟲介紹
- 分散式爬蟲在實際應用中還算是多的,本篇簡單介紹一下分散式爬蟲
什麼是分散式爬蟲
- 分散式爬蟲就是多臺計算機上都安裝爬蟲程式,重點是聯合採集。單機爬蟲就是隻在一臺計算機上的爬蟲。
- 其實搜尋引擎都是爬蟲,負責從世界各地的網站上爬取內容,當你搜尋關鍵詞時就把相關的內容展示給你,只不過他們那都是灰常大的爬蟲,爬的內容量也超乎想象,也就無法再用單機爬蟲去實現,而是使用分散式了,一臺伺服器不行,我來1000臺。我這麼多分佈在各地的伺服器都是為了完成爬蟲工作,彼此得通力協作才行啊,於是就有了分散式爬蟲
- 單機爬蟲的問題:
- 一臺計算機的效率問題
- IO 的吞吐量,傳輸速率也有限
- 多爬蟲問題
- 多爬蟲要實現資料共享
- 比如說一個爬取了某個網站,下載了哪些內容,其他爬蟲要知道,以避免重複爬取等很多問題,所以要實現資料共享
- 在空間上不同的多臺機器,可以成為分散式
- 多爬蟲要實現資料共享
- 多爬蟲條件:
- 需要共享佇列
- 去重,讓多個爬蟲不爬取其他爬蟲爬取過的爬蟲
- 理解分散式爬蟲:
- 假設上萬的 url 需要爬取,有 100 多個爬蟲,分佈在全國不同的城市
- url 被分給不同的爬蟲,但是不同爬蟲的效率又是不一樣的,所以說共享佇列,共享資料,讓效率高的爬蟲多去做任務,而不是等著效率低的爬蟲
- Redis
- Redis 是完全開源免費的,遵守BSD協議,是一個高效能的 key-value 資料庫
- 記憶體資料庫,資料存放在記憶體
- 同時可以落地儲存到硬碟
- 可以去重
- 可以把 Redis 理解成一共 dict,set,list 的集合體
- Redis 可以對儲存的內容進行生命週期
- Redis 教程:Redis 教程 - 菜鳥教程
- 內容儲存資料庫
- MongoDB,執行在記憶體,資料儲存在硬碟
- MySQL
- 等等
安裝 scrapy_redis
- 1.開啟【cmd】
- 2.進入使用的 Anaconda 環境
- 3.使用 pip 安裝
- 4.操作截圖
分散式爬蟲的結構
主從分散式爬蟲
- 所謂主從模式,就是由一臺伺服器充當 master,若干臺伺服器充當 slave,master 負責管理所有連線上來的 slave,包括管理 slave 連線、任務排程與分發、結果回收並彙總等;每個 slave 只需要從 master 那裡領取任務並獨自完成任務最後上傳結果即可,期間不需要與其他 slave 進行交流。這種方式簡單易於管理,但是很明顯 master 需要與所有 slave 進行交流,那麼 master 的效能就成了制約整個系統的瓶頸,特別是當連線上的slave數量龐大的時候,很容易導致整個爬蟲系統效能下降
- 主從分散式爬蟲結構圖:
這是經典的主從分散式爬蟲結構圖,圖中的控制節點ControlNode就是上面提到的master,爬蟲節點SpiderNode就是上面提到的slave。下面這張圖展示了爬蟲節點slave的執行任務示意圖 - 控制節點執行流程圖:
- 這兩張圖很明瞭地介紹了整個爬蟲框架,我們在這裡梳理一下:
- 1.整個分散式爬蟲系統由兩部分組成:master控制節點和slave爬蟲節點
- 2.master控制節點負責:slave節點任務排程、url管理、結果處理
- 3.slave爬蟲節點負責:本節點爬蟲排程、HTML下載管理、HTML內容解析管理
- 4.系統工作流程:master將任務(未爬取的url)分發下去,slave通過master的URL管理器領取任務(url)並獨自完成對應任務(url)的HTML內容下載、內容解析,解析出來的內容包含目標資料和新的url,這個工作完成後slave將結果(目標資料+新url)提交給master的資料提取程式(屬於master的結果處理),該程式完成兩個任務:提取出新的url交於url管理器、提取目標資料交於資料儲存程式,master的url管理程式收到url後進行驗證(是否已爬取過)並處理(未爬取的新增進待爬url集合,爬過的新增進已爬url集合),然後slave迴圈從url管理器獲取任務、執行任務、提交結果......
- 本篇就介紹到這裡了
更多文章連結:Python 爬蟲隨筆
- 本筆記不允許任何個人和組織轉載