1.scrapy-redis的環境準備
pip install scrapy-redis
安裝完畢之後確保其可以正常匯入使用即可。
2. 實現
接下來我們只需要簡單的幾步操作就可以實現分散式爬蟲的配置了。
2.1修改 Scheduler
在前面的課時中我們講解了 Scheduler 的概念,它是用來處理 Request、Item 等物件的排程邏輯的,預設情況下,Request 的佇列是在/記憶體/中的,為了實現分散式,我們需要將佇列遷移到 Redis 中,這時候我們就需要修改 Scheduler,修改非常簡單,只需要在 settings.py 裡面新增如下程式碼即可:
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
這裡我們將 Scheduler 的類修改為 Scrapy-Redis 提供的 Scheduler 類,這樣在我們執行爬蟲時,Request 佇列就會出現在 Redis 中了。
2.2修改 Redis 連線資訊
另外我們還需要修改下 Redis 的連線資訊,這樣 Scrapy 才能成功連線到 Redis 資料庫,修改格式如下:
REDIS_URL = 'redis://[user:pass]@hostname:9001'
在這裡我們需要根據如上的格式來修改,由於我的 Redis 是在本地執行的,所以在這裡就不需要填寫使用者名稱密碼了,直接設定為如下內容即可:
REDIS_URL = 'redis://localhost:6379'
2.3修改去重類
既然 Request 佇列遷移到了 Redis,那麼相應的去重操作我們也需要遷移到 Redis 裡面,前一節課我們講解了 Dupefilter 的原理,這裡我們就修改下去重類來實現基於 Redis 的去重:
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
2.4配置持久化
一般來說開啟了 Redis 分散式佇列之後,我們不希望爬蟲在關閉時將整個佇列和去重資訊全部刪除,因為很有可能在某個情況下我們會手動關閉爬蟲或者爬蟲遭遇意外終止,為了解決這個問題,我們可以配置 Redis 佇列的持久化,修改如下:
SCHEDULER_PERSIST = True
好了,到此為止我們就完成分散式爬蟲的配置了。
3.執行
上面我們完成的實際上並不是真正意義的分散式爬蟲,因為 Redis 佇列我們使用的是本地的 Redis,所以多個爬蟲需要執行在本地才可以,如果想實現真正意義的分散式爬蟲,可以使用遠端 Redis,這樣我們就能在多臺主機執行爬蟲連線此 Redis 從而實現真正意義上的分散式爬蟲了。