天天看點

爬蟲基礎 Scrapy-Redis分布式爬蟲元件Scrapy-Redis分布式爬蟲元件

Scrapy-Redis分布式爬蟲元件

Scrapy

是一個架構,他本身是不支援分布式的。如果我們想要做分布式的爬蟲,就需要借助一個元件叫做

Scrapy-Redis

,這個元件正是利用了

Redis

可以分布式的功能,內建到

Scrapy

架構中,使得爬蟲可以進行分布式。可以充分的利用資源(多個ip、更多帶寬、同步爬取)來提高爬蟲的爬行效率。

分布式爬蟲的優點:

  1. 可以充分利用多台機器的帶寬。
  2. 可以充分利用多台機器的ip位址。
  3. 多台機器做,爬取效率更高。

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

  1. 分布式爬蟲是好幾台機器在同時運作,如何保證不同的機器爬取頁面的時候不會出現重複爬取的問題。
  2. 同樣,分布式爬蟲在不同的機器上運作,在把資料爬完後如何保證儲存在同一個地方。

安裝:

通過

pip install scrapy-redis

即可安裝。

Scrapy-Redis架構:

Scrapy架構圖:

爬蟲基礎 Scrapy-Redis分布式爬蟲元件Scrapy-Redis分布式爬蟲元件

Scrapy-Redis架構圖:

爬蟲基礎 Scrapy-Redis分布式爬蟲元件Scrapy-Redis分布式爬蟲元件

分布式爬蟲架構圖:

爬蟲基礎 Scrapy-Redis分布式爬蟲元件Scrapy-Redis分布式爬蟲元件

以上兩個圖檔對比我們可以發現。

Item Pipeline

在接收到資料後發送給了

Redis

Scheduler

排程器排程資料也是從

Redis

中來的、并且其實資料去重也是在

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. 在配置檔案中增加如下配置(配置redis的端口号和ip):
# 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 = '127.0.0.1'
    REDIS_PORT = 6379
           
  1. 運作爬蟲:
    1. 在爬蟲伺服器上。進入爬蟲檔案所在的路徑,然後輸入指令:

      scrapy runspider [爬蟲名字]

      進入項目spiders所在的目錄
                 
    2. Redis

      伺服器上,推入一個開始的url連結:

      redis-cli> lpush [redis_key] start_url

      開始爬取。