什麼是分佈式爬蟲?
默認情況下,scrapy爬蟲是單機爬蟲,只能在一臺電腦上運行,因爲爬蟲調度器當中的隊列queue去重和set集合都是在本機上創建的,其他電腦無法訪問另一臺電腦上的內存中的內容。分佈式爬蟲是一個用共同的爬蟲程序,同時部署到多臺電腦上運行,這樣可以提高爬蟲速度,實現分佈式爬蟲。
今天我就來給大家講一下使用scrapy_redis實現分佈式爬蟲
第一步:
創建一個scrapy爬蟲項目,完善代碼爬出你要爬取的數據,至於如何創建不知道的小夥伴請看我前面的關於scrapy框架的使用的博客
第二步:
更改scrapy爬蟲項目中的一些內容
1.引入scrapy_redis,下面的代碼使用一個就可以,RedisCrawlSpider和RedisSpider運行步驟相同,
from scrapy_redis.spiders import RedisCrawlSpider
# from scrapy_redis.spiders import RedisSpider
將繼承換爲RedisCrawlSpider或RedisSpider
2.註釋掉start_urls,添加一個redis_key='類名:start_urls',當然這裏的類名可以隨便寫,不過規範的寫法是你的"爬蟲類名:+start_urls",這裏字符串中類名不分大小寫
redis_key='類名:start_urls'
3.setting文件中添加下面幾句代碼
# 使用scrapy_redis裏的去重組件,不使用scrapy默認的去重方式
DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter'
# 使用scrapy_redis裏的調度器組件,不使用默認的調度器
# scheduler調度器
SCHEDULER = 'scrapy_redis.scheduler.Scheduler'
# 允許暫停,redis請求記錄不丟失
SCHEDULER_PERSIST = True
# # 默認的scrapy_redis請求隊列形式(按優先級)
# # priority優先權
# SCHEDULER_QUEUE_CLASS ='scrapy_redis.queue.SpiderPriorityQueue'
# 連接服務器端的redis數據庫
REDIS_URL = 'redis://root:@192.168.52.176:6379'
REDIS_URL = 'redis://root:@192.168.52.176:6379' @後面寫要連接到的服務器端的IP,6379是默認的端口號
4.在settings文件中解註釋ITEM_PIPELINES 並將紅框中的代碼添加進去,使數據可以存入redis數據庫中,
第三步:
1.服務端修改redis.windows.conf文件,在如圖所示的位置添加: bind 服務端IP。
2.將你的代碼發給另一臺主機並打開
3.開啓服務端,不知道如何開啓的小夥伴可以看一下我的上篇博客
4.兩臺主機同時在控制檯輸入 scrapy crawl 爬蟲名,運行爬蟲程序,因爲沒有start_urls所以會等待傳入開始網址
5.開啓服務端的主機另打開一個命令提示符,連接本地服務器,輸入lpush + 第二步中的redis_key的值+ 開始網址
例:
lpush 類名:start_urls http://blog.jobbole.com/all-posts/
傳入開始網址之後爬蟲程序會接收到 ,然後開始爬蟲
注意:客戶端的小夥伴只需要將服務端的代碼文件複製過來,打開運行就行了,不需要做其他操作