Python爬蟲教程-34-分布式爬蟲介紹


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 爬蟲隨筆


- 本筆記不允許任何個人和組織轉載


免責聲明!

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



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