scrapy
是乙個框架,他本身是不支援分布式的。如果我們想要做分布式的爬蟲,就需要借助乙個元件叫做scrapy-redis
,這個元件正是利用了redis
可以分布式的功能,整合到scrapy
框架中,使得爬蟲可以進行分布式。可以充分的利用資源(多個ip、更多頻寬、同步爬取)來提高爬蟲的爬行效率。
可以充分利用多台機器的頻寬。
可以充分利用多台機器的ip位址。
多台機器做,爬取效率更高。
分布式爬蟲是好幾臺機器在同時執行,如何保證不同的機器爬取頁面的時候不會出現重複爬取的問題。
同樣,分布式爬蟲在不同的機器上執行,在把資料爬完後如何保證儲存在同乙個地方。
通過pip install scrapy-redis
即可安裝。
scrapy架構圖:
scrapy-redis架構圖:
分布式爬蟲架構圖:
以上兩個對比我們可以發現。item pipeline
在接收到資料後傳送給了redis
、scheduler
排程器排程資料也是從redis
中來的、並且其實資料去重也是在redis
中做的。
要將乙個scrapy
專案變成乙個scrapy-redis
專案只需修改以下三點就可以了:
將爬蟲的類從scrapy.spider
變成scrapy_redis.spiders.redisspider
;或者是從scrapy.crawlspider
變成scrapy_redis.spiders.rediscrawlspider
。
將爬蟲中的start_urls
刪掉。增加乙個redis_key="***"
。這個redis_key
是為了以後在redis
中控制爬蟲啟動的。爬蟲的第乙個url,就是在redis中通過這個傳送出去的。
在配置檔案中增加如下配置(配置redis的埠號和ip):
# scrapy-redis相關配置
# 確保request儲存到redis中
scheduler = "scrapy_redis.scheduler.scheduler"
# 確保所有爬蟲共享相同的去重指紋
dupefilter_class = "scrapy_redis.dupefilter.rfpdupefilter"
# 設定redis為item pipeline
item_pipelines =
# 在redis中保持scrapy-redis用到的佇列,不會清理redis中的佇列,從而可以實現暫停和恢復的功能。
scheduler_persist = true
# 設定連線redis資訊
redis_host = '127.0.0.1'
redis_port = 6379
執行爬蟲:
在爬蟲伺服器上。進入爬蟲檔案所在的路徑,然後輸入命令:scrapy runspider [爬蟲名字]
。
進入專案spiders所在的目錄
scrapy redis分布式爬蟲
依賴環境 scrapy 1.1 redis 2.8 分布式爬蟲 將乙個專案拷貝到多台電腦上,同時爬取資料。1.必須保證所有電腦上的 是相同的配置。2.在其中一台電腦上啟動redis和mysql的資料庫服務。3.同時將所有的爬蟲專案執行起來。4.在啟動redis和mysql資料庫的電腦上,向redis...
94 爬蟲 scrapy redis實戰(五)
有緣網的資料爬回來了,但是放在redis裡沒有處理。之前我們配置檔案裡面沒有定製自己的item pipelines,而是使用了redispipeline,所以現在這些資料都被儲存在redis的youyuan items鍵中,所以我們需要另外做處理。在scrapy youyuan目錄下可以看到乙個pr...
scrapy redis分布式爬蟲
話不多說,先上scrapy scrapy流程圖 流程圖所示 當客戶端從伺服器端拿去任務進行資料爬取時,客戶端產生的資料,url 會再次提交給伺服器,進行資料抓取,產生新的response,在爬取的時候,產生的大量資料,可能會導致爬蟲的速度變慢,占用redis大量的儲存空間。scrapy redis常...