從零搭建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
-
首先Slaver端從Master端拿任務(Request、url)進行資料抓取,Slaver抓取資料的同時,產生新任務的Request便提交給 Master 處理;
-
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
-
Master端redis.conf裡註釋
bind 127.0.0.1
,Slave端才能遠端連線到Master端的Redis資料庫。
daemonize yno
表示Redis預設不作為守護程序執行,即在執行redis-server /etc/redis/redis.conf
daemonize yes
則預設後臺執行,不必重新啟動新的終端視窗執行其他命令,看個人喜好和實際需要。三、測試Slave端遠端連線Master端
測試中,Master端Windows 10 的IP地址為:
192.168.199.108
-
Master端按指定配置檔案啟動
redis-server
,示例:-
非Windows系統:
sudo redis-server /etc/redis/redis/conf
-
Windows系統:
命令提示符(管理員)
模式下執行redis-server C:\Intel\Redis\conf\redis.conf
讀取預設配置即可。
-
-
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 等平臺: