scrapy redis實現分布式爬蟲

2021-10-06 20:24:42 字數 2832 閱讀 1475

redis資料庫

——redis是乙個開源的支援網路、可基於記憶體亦可持久化的日誌型、非關係型、key-value資料庫,其結構十分靈活。

——redis是記憶體中的資料結構儲存系統,處理速度快,提供佇列集合等多種儲存結構,方便佇列維護。

——redis提供了集合資料結構,排程伺服器借助redis結合實現url去重。

——使用者可在redis集合中儲存每個request的指紋(所謂指紋,就是標誌request唯一性的多個特徵),從而判斷request是否已經加入了佇列,如果已經加入,就不再重複新增。

redis的安裝

2.3這種方法雖然啟動了redis,但只要關閉cmd視窗,redis就會停止執行,所以將redis設定成windows下的服務

redis-server --service-install redis.windows-service.conf --loglevel verbose

redis-server --service-start
2.4停止redis服務

redis-server --service-stop
######報錯問題#######:

>redis-server --service-start

[15852] 09 jun 08:49:31.499 # handleservicecommands: system error caught. error code=2, message = startservice failed: no such file or directory

原因是系統服務中已經存在

先解除安裝之前存在的

再安裝

redis-server --service-install redis.windows.conf --loglevel verbose

啟動成功!

3.scrapy_redis實現分布式爬蟲

scrapy_redis庫:提供了所需的功能,scrapy_redis改寫了scrapy的排程器、佇列等元件,利用這個庫可以方便地實現scrapy分布式架構。

3.1安裝scrapy_redis庫

>pip install scrapy_redis
3.2修改settings中的配置資訊

替換scrapy排程器,使用scrapy_redis排程

scheduler = "scrapy_redis.scheduler.scheduler"
使用scrapy_redis去重

dupefilter_class = "scrapy_redis.dupefilter.rfpdupefilter"
設定redis的連線資訊,這裡的可以設定使用者名稱和密碼,如果沒有則為空

redis_url = "redis://localhost:6379"
設定redis佇列是否儲存

如果設定為true,則不會清空redis裡面的去重佇列和請求佇列,這樣設定後,去重佇列和請求佇列會一直儲存在redis資料庫中,使用者可以暫停和啟動爬蟲而不影響繼續去重

scheduler_persist = true
設定重啟爬蟲時是否清空爬蟲佇列

如果設定為true,每次重啟爬蟲,系統都會清空去重佇列和請求佇列,一般設定為false

scheduler_flush_on_start = true
修改spider檔案:

當使用scrapy_redis編寫分布式爬蟲時,需要將爬蟲類修改為繼承自scrapy_redis.spiders.rediscrawspider類。

from scrapy_redis.spiders import rediscrawlspider

from lianjia01.items import lianjia01item

class lianjiaspider(rediscrawlspider):

name = 'lianjia'

allowed_domains = ['m.lianjia.com']

redis_key = 'lianjiaspider:start_urls'

……

執行爬蟲

修改完成後啟動爬蟲。因為**中沒有指定初始url,爬蟲會一直等待,沒有爬取任何網頁。使用者可以手動向redis的初始url佇列中新增url,佇列的名稱為

lianjiaspider:start_urls
預設情況下,在命令列定位到redis目錄,採用集合的命令進行新增

redis-cli lpush lianjiaspider:start_urls

使用scrapy redis實現分布式

要實現分布式,主機之間需要共享爬取佇列和去衝集合,scrapy redis就是將request排程佇列 請求佇列和獲取的item放在了乙個多台主機可以同時訪問的redis資料庫中。剖析原始碼的工作請根據需要自行學習,直接給出settings中的配置。一 必要配置 以下配置是scrapy redis實...

scrapy redis實現分布式爬蟲

一 認識與安裝scrapy redis庫 1 認識scrapy redis庫 scrapy redis庫 提供了所需的功能,scrapy redis改寫了scrapy的排程器 佇列等元件,利用這個庫可以方便地實現scrapy分布式架構。2 安裝scrapy redis庫 pip install sc...

scrapy redis實現分布式爬蟲

原來scrapy的scheduler維護的是本機的任務佇列 存放request物件及其 函式等資訊 本機的去重佇列 存放訪問過的url位址 所以實現分布式爬取的關鍵就是,找一台專門的主機上執行乙個共享的佇列比如redis,然後重寫scrapy的scheduler,讓新的scheduler到共享佇列訪...