首先我們先看一下scrapy的單機架構
也就是說scrapy的單機架構實際上實在本機維護乙個爬取佇列,用scheduler進行排程,如果我們要實現scarpy的分布式,就需要多台主機協同操作,那麼問題來了
實際上就是共享爬取佇列:核心就是將這個佇列進行共享,讓多台主機都能訪問,然後讓各個主機的scheduler進行排程,這樣就可以共享requests,進行統一的抓取。
在進行抓取中,因為有多台主機訪問乙個佇列,所以他們請求到的url可能會相同,那麼抓取到的資料可能會一樣,那麼我們要怎麼保證各個主機拿到的requests佇列是不重複的呢?
這裡我們可以使用redis集合。儲存每個reuqest指紋
因為有多台機器在執行,可能會出現一些意外狀況導致程式突然中斷,比如:家裡電腦被女朋友砸了,或者斷電停網什麼的?,那麼我們應該怎麼來防止程式中斷呢?
這裡scrapy有乙個啟動判斷
說了這麼多,我們需要維護request佇列,需要多台從機執行程式,還需要乙個redis去重的機制,那麼我們應該怎麼實現這個架構呢?
那麼這裡就可以使用乙個功能強(xiu)大(de)無(fei)比(qi)的庫,scrapy-redis,關於前面我們所提到的問題,它都已經解決了。我們只需要使用這個庫,它就可以很完美的配合scrapy來完成分布式架構的爬取了。
pip install scrapy-redis # 安裝命令
scrapy-redis
scrapy-redis實現了如上架構,改寫了scrapy的排程器,
佇列等元件。 利用他可以方便的實現scrapy分布式架構。
關於這裡面的各個檔案,我就不一一介紹了,大家感興趣可以去看看。
scrapy 分布式爬蟲
scrapy redis元件作用 修改配置檔案settings 使用scrapy redis元件自己的排程器 配置排程器是否要持久化,也就是當爬蟲結束了,要不要清空redis中請求佇列和去重指紋的set。如果是true,就表示要持久化儲存,就不清空資料,否則清空資料 redis port 6379 ...
分布式儲存原理
當hdfs集群啟動之時,datanode會向namenode傳送資訊,包括block儲存位置,datanode位址。client向namenode匯報當前上傳檔案的資訊 block數量 檔案上傳時間 檔案許可權 擁有著 2.1client將大檔案切割成乙個個的block塊 以字元為單位進行切割 cl...
scrapy框架之分布式爬蟲
scrapy redis元件作用 實現流程 修改配置檔案settings 結合著配置檔案開啟redis服務 啟動客戶端 執行工程 進入到spiders目錄下 向排程器的佇列中放入乙個起始url 爬取到的資料儲存在了redis的proname items這個資料結構中 其實分布式的 並不難,主要是配置...