Python爬蟲5.12 — scrapy框架scrapy-redis[分佈式爬蟲]模塊的使用

綜述

本系列文檔用於對Python爬蟲技術的學習進行簡單的教程講解,鞏固自己技術知識的同時,萬一一不小心又正好對你有用那就更好了。
Python 版本是3.7.4

前面的文章我們學習了scrapy框架開發爬蟲的各種使用方法,下面我們來學習以下分佈式爬蟲的開發。

Scrapy-Redis分佈式爬蟲組件

Scrapy是一個框架,他本身示不支持分佈式的。如果我們想要做分佈式的爬蟲,就需要藉助一個組件叫做Scrapy-Redis,這個組件正式利用了Redis可以分佈式的功能,集成到Scrapy框架中,使得爬蟲可以進行分佈式。可以充分利用資源(多個IP、更多帶寬、同步爬取)來提高爬蟲的爬行效率。

分佈式爬蟲的有點

  1. 可以充分利用多臺機器的貸款。
  2. 可以充分利用多臺及其的ip地址。
  3. 多臺機器同時爬取,爬取數據的效率更高。

分佈式爬蟲必須要解決的問題

  1. 分佈式爬蟲示好幾臺機器同時運行,如何保證不同的機器爬取頁面的時候不會出現重複爬取的問題。
  2. 同樣,分佈式使爬蟲再不同的機器上運行,在把數據爬取完後如何保證存在同一個地方。

安裝Scrapy-Redis

    pip install scrapy-redis

運行上述命令即可安裝。

Scrapy-Redis架構

Scrapy 架構圖

Scrapy架構圖1

Scrapy-Redis 架構圖

Scrapy-Redis 架構圖

開發分佈式爬蟲

開發

想要開發一個分佈式爬蟲,首先要開發好一個普通爬蟲,然後更改一些代碼即可。要將一個Scrapy項目爬蟲變成一個Scrapy-Redis項目只需要修改以下三點:

  1. 將爬蟲的類從scrapy.Spider變成scrapy_redis.spiders.RedisSpider;或者是從scrapy.CrawlSpider變成scrapy_redis.spiders.RedisCrawlSpider
  2. 將爬蟲中的start_urls刪掉,增加一個redis_key=xxx。這個redis_key是爲了以後在redis中控制爬蟲啓動的。爬蟲的第一個url,就是在redis中通過這個發送出去的。
  3. 在配置文件中增加如下配置:
# Scrapy-Redis相關的配置
# 確保request存儲到redis中
SCHEDULER = "scrapy_redis.scheduler.Scheduler"

# 確保所有爬蟲共享相關的去重指紋
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

# 設置redis爲item pipeline
ITEM_PIPELINES = {
    'scrapy_redis.pipelines.RedisPipeline': 300,
}

# 在redis中保持scrapy-redis用到的隊列,不會清理redis中的隊列,從而可以實現暫停和恢復的功能
SCHEDULER_PERSIST = True

# 設置連接redis信息
REDIS_HOST = "192.168.1.108"
REDIS_PORT = 6379

運行

運行爬蟲需要執行下述步驟:

  1. 在爬蟲服務器上,進入到爬蟲文件所在的路徑,然後輸入命令:scrapy runspider [爬蟲名字]
  2. redis服務器上,推入一個開始的url連接:redis-cli > lpush [redis_key] start_url開始爬取。

結語

Python爬蟲系列的博文到此篇算是全部結束了,歡迎大家指正,相互學習。

其他博文鏈接

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