scrapy如何實現分布式爬蟲

2022-09-15 07:51:08 字數 737 閱讀 8712

使用scrapy爬蟲的時候,記錄一下如何分布式爬蟲問題:

關鍵在於多台主機協作的關鍵:共享爬蟲佇列

主機:維護爬取佇列

從機:負責資料抓取,資料處理,資料儲存

佇列如何維護:redis佇列

redis 非關係型資料庫,key-value形式儲存,結構靈活。是記憶體中的資料結構儲存系統,處理速度快,效能好

提供佇列,集合等多種儲存結構,方便佇列維護

怎麼去重

redis集合:redis提供集合資料結構,在redis集合中儲存每個request的指紋,在向request佇列中加入request前首先

驗證這個request的指紋是否已經加入集合中,如果已存在,則不新增到request佇列,如果不存在,則將request新增到佇列

並將指紋新增到集合。

(之前很多框架說利用bloom過濾器來實現去重,但是bloom過濾器有個假陽性的問題,即可能不存在集合的問題,bloom過濾器錯誤地判斷為在集合中。)

怎麼防止中斷:

啟動判斷,在每台從機scrapy啟動時首先判斷當前的redis request佇列

是否為空,如果不為空,則從佇列中取得下乙個request進行爬取。

如果為空,則重新開始爬取,第一台從機執行爬取向佇列中新增request

如何實現這樣的架構

庫:scrapy-redis:實現了維護爬取佇列、去重、中斷、redis介面

改寫了scrapy的排程器、佇列等元件,利用它可以實現分布式架構

scrapy 分布式爬蟲

scrapy redis元件作用 修改配置檔案settings 使用scrapy redis元件自己的排程器 配置排程器是否要持久化,也就是當爬蟲結束了,要不要清空redis中請求佇列和去重指紋的set。如果是true,就表示要持久化儲存,就不清空資料,否則清空資料 redis port 6379 ...

scrapy框架之分布式爬蟲

scrapy redis元件作用 實現流程 修改配置檔案settings 結合著配置檔案開啟redis服務 啟動客戶端 執行工程 進入到spiders目錄下 向排程器的佇列中放入乙個起始url 爬取到的資料儲存在了redis的proname items這個資料結構中 其實分布式的 並不難,主要是配置...

scrapy redis實現分布式爬蟲

redis資料庫 redis是乙個開源的支援網路 可基於記憶體亦可持久化的日誌型 非關係型 key value資料庫,其結構十分靈活。redis是記憶體中的資料結構儲存系統,處理速度快,提供佇列集合等多種儲存結構,方便佇列維護。redis提供了集合資料結構,排程伺服器借助redis結合實現url去重...