1. 程式人生 > >scrapy基礎知識之 Scrapy-Redis分布式策略:

scrapy基礎知識之 Scrapy-Redis分布式策略:

空間 spider head spi 指紋 負責 edi all redis

Scrapy-Redis分布式策略:

假設有四臺電腦:Windows 10、Mac OS X、Ubuntu 16.04、CentOS 7.2,任意一臺電腦都可以作為 Master端 或 Slaver端,比如:

  • Master端(核心服務器) :使用 Windows 10,搭建一個Redis數據庫,不負責爬取,只負責url指紋判重、Request的分配,以及數據的存儲

  • Slaver端(爬蟲程序執行端) :使用 Mac OS X 、Ubuntu 16.04、CentOS 7.2,負責執行爬蟲程序,運行過程中提交新的Request給Master

技術分享

  1. 首先Slaver端從Master端拿任務(Request、url)進行數據抓取,Slaver抓取數據的同時,產生新任務的Request便提交給 Master 處理;

  2. Master端只有一個Redis數據庫,負責將未處理的Request去重和任務分配,將處理後的Request加入待爬隊列,並且存儲爬取的數據。

Scrapy-Redis默認使用的就是這種策略,我們實現起來很簡單,因為任務調度等工作Scrapy-Redis都已經幫我們做好了,我們只需要繼承RedisSpider、指定redis_key就行了。

缺點是,Scrapy-Redis調度的任務是Request對象,裏面信息量比較大(不僅包含url,還有callback函數、headers等信息),可能導致的結果就是會降低爬蟲速度、而且會占用Redis大量的存儲空間,所以如果要保證效率,那麽就需要一定硬件水平。

scrapy基礎知識之 Scrapy-Redis分布式策略: