Python之分散式爬蟲的實現步驟

qq_42603652發表於2018-08-29

什麼是分散式爬蟲?

預設情況下,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/

傳入開始網址之後爬蟲程式會接收到 ,然後開始爬蟲

注意:客戶端的小夥伴只需要將服務端的程式碼檔案複製過來,開啟執行就行了,不需要做其他操作

 

相關文章