1. 程式人生 > >從零搭建Redis-Scrapy分散式爬蟲

從零搭建Redis-Scrapy分散式爬蟲

Scrapy-Redis分散式策略:

假設有四臺電腦:Windows 10、Mac OS X、Ubuntu 16.04、CentOS 7.2,任意一臺電腦都可以作為 Master端 或 Slaver端,比如:

  • Master端(核心伺服器) :使用 Windows 10,搭建一個Redis資料庫,不負責爬取,只負責url指紋判重、Request的分配,以及資料的儲存

  • Slaver端(爬蟲程式執行端) :使用 Mac OS X 、Ubuntu 16.04、CentOS 7.2,負責執行爬蟲程式,執行過程中提交新的Request給Master


  1. 首先Slaver端從Master端拿任務(Request、url)進行資料抓取,Slaver抓取資料的同時,產生新任務的Request便提交給 Master 處理;

  2. Master端只有一個Redis資料庫,負責將未處理的Request去重和任務分配,將處理後的Request加入待爬佇列,並且儲存爬取的資料。

Scrapy-Redis預設使用的就是這種策略,我們實現起來很簡單,因為任務排程等工作Scrapy-Redis都已經幫我們做好了,我們只需要繼承RedisSpider、指定redis_key就行了。

缺點是,Scrapy-Redis排程的任務是Request物件,裡面資訊量比較大(不僅包含url,還有callback函式、headers等資訊),可能導致的結果就是會降低爬蟲速度、而且會佔用Redis大量的儲存空間,所以如果要保證效率,那麼就需要一定硬體水平。

一、安裝Redis

安裝完成後,拷貝一份Redis安裝目錄下的redis.conf到任意目錄,建議儲存到:/etc/redis/redis.conf(Windows系統可以無需變動)

二、修改配置檔案 redis.conf

開啟你的redis.conf配置檔案,示例:

  • 非Windows系統:sudo vi /etc/redis/redis.conf

  • Windows系統:C:\Intel\Redis\conf\redis.conf

  1. Master端redis.conf裡註釋bind 127.0.0.1,Slave端才能遠端連線到Master端的Redis資料庫。

daemonize yno表示Redis預設不作為守護程序執行,即在執行redis-server /etc/redis/redis.conf

時,將顯示Redis啟動提示畫面;

  • daemonize yes則預設後臺執行,不必重新啟動新的終端視窗執行其他命令,看個人喜好和實際需要。
  • 三、測試Slave端遠端連線Master端

    測試中,Master端Windows 10 的IP地址為:192.168.199.108

    1. Master端按指定配置檔案啟動redis-server,示例:

      • 非Windows系統:sudo redis-server /etc/redis/redis/conf

      • Windows系統:命令提示符(管理員)模式下執行redis-server C:\Intel\Redis\conf\redis.conf讀取預設配置即可。

    2. Master端啟動本地redis-cli

  • slave端啟動redis-cli -h 192.168.199.108,-h 引數表示連線到指定主機的redis資料庫
注意:Slave端無需啟動redis-server,Master端啟動即可。只要 Slave 端讀取到了 Master 端的 Redis 資料庫,則表示能夠連線成功,可以實施分散式。

四、Redis資料庫桌面管理工具

這裡推薦 Redis Desktop Manager,支援 Windows、Mac OS X、Linux 等平臺: