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

什麼是分佈式爬蟲?

默認情況下,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/

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

注意:客戶端的小夥伴只需要將服務端的代碼文件複製過來,打開運行就行了,不需要做其他操作

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章