爬蟲基礎 Scrapy Redis分布式爬蟲元件

2021-10-09 11:32:52 字數 1898 閱讀 1206

scrapy是乙個框架,他本身是不支援分布式的。如果我們想要做分布式的爬蟲,就需要借助乙個元件叫做scrapy-redis,這個元件正是利用了redis可以分布式的功能,整合到scrapy框架中,使得爬蟲可以進行分布式。可以充分的利用資源(多個ip、更多頻寬、同步爬取)來提高爬蟲的爬行效率。

可以充分利用多台機器的頻寬。

可以充分利用多台機器的ip位址。

多台機器做,爬取效率更高。

分布式爬蟲是好幾臺機器在同時執行,如何保證不同的機器爬取頁面的時候不會出現重複爬取的問題。

同樣,分布式爬蟲在不同的機器上執行,在把資料爬完後如何保證儲存在同乙個地方。

通過pip install scrapy-redis即可安裝。

scrapy架構圖:

scrapy-redis架構圖:

分布式爬蟲架構圖:

以上兩個對比我們可以發現。item pipeline在接收到資料後傳送給了redisscheduler排程器排程資料也是從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常...