scrapy
是乙個框架,他本身是不支援分布式的。如果我們想要做分布式的爬蟲,就需要借助乙個元件叫做scrapy-redis
,這個元件正是利用了redis
可以分布式的功能,整合到scrapy
框架中,使得爬蟲可以進行分布式。可以充分的利用資源(多個ip、更多頻寬、同步爬取)來提高爬蟲的爬行效率。
可以充分利用多台機器的頻寬。
可以充分利用多台機器的ip位址。
多台機器做,爬取效率更高。
分布式爬蟲是好幾臺機器在同時執行,如何保證不同的機器爬取頁面的時候不會出現重複爬取的問題。
同樣,分布式爬蟲在不同的機器上執行,在把資料爬完後如何保證儲存在同乙個地方。
通過pip install scrapy-redis
即可安裝。
scrapy架構圖:
scrapy-redis架構圖:
分布式爬蟲架構圖:
以上兩個對比我們可以發現。item pipeline
在接收到資料後傳送給了redis
、scheduler
排程器排程資料也是從redis
中來的、並且其實資料去重也是在redis
中做的。
pycharm啟用碼教程使用更多解釋請見:
要將乙個scrapy
專案變成乙個scrapy-redis
專案只需修改以下三點就可以了:
將爬蟲的類從scrapy.spider
變成scrapy_redis.spiders.redisspider
;或者是從scrapy.crawlspider
變成scrapy_redis.spiders.rediscrawlspider
。
將爬蟲中的start_urls
刪掉。增加乙個redis_key="***"
。這個redis_key
是為了以後在redis
中控制爬蟲啟動的。爬蟲的第乙個url,就是在redis中通過這個傳送出去的。
在配置檔案中增加如下配置:
# 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 [爬蟲名字]
。 scrapy,redis分布式爬取貓眼電影!
能夠利用redis快取資料庫的優點去重來避免資料的大面積冗餘 1 首先就是要建立貓眼爬蟲專案 2 進入專案內部建立乙個爬蟲檔案 建立完檔案之後就是要爬取的內容,我這邊以爬取貓眼電影的title和link為例 這個完全看個人你可以先去寫爬蟲,然後再來寫items檔案 3 編寫item檔案 python...
10 給予scrapy redis的分布式爬蟲
pip install scrapy redis scrapy redis提供了兩種爬蟲 from scrapy redis.spiders import redisspider class myspider redisspider spider that reads urls from redis...
scrapy redis分布式爬蟲
依賴環境 scrapy 1.1 redis 2.8 分布式爬蟲 將乙個專案拷貝到多台電腦上,同時爬取資料。1.必須保證所有電腦上的 是相同的配置。2.在其中一台電腦上啟動redis和mysql的資料庫服務。3.同時將所有的爬蟲專案執行起來。4.在啟動redis和mysql資料庫的電腦上,向redis...