1. 程式人生 > >scrapy_redis實現爬蟲

scrapy_redis實現爬蟲

height 一個 req lte schedule 調度器 bsp filter start

1、scrapy_redis的流程

  • 在scrapy_redis中,所有的帶抓取的對象和去重的指紋都存在所有的服務器公用的redis中
  • 所有的服務器公用一個redis中的request對象
  • 所有的request對象存入redis前,都會在同一個redis中進行判斷,之前是否已經存入過
  • 在默認的情況下,所有數據會存放在redis中
  • 技術分享圖片

2、scrapy_redis的原理分析

我們從settings.py中的三個配置來進行分析 分別是:

  • RedisPipeline
  • RFPDupeFilter
  • Schedule

2.1、Scrapy_redis之RedisPipeline

RedisPipeline中觀察process_item,進行數據的保存,存入了redis中

技術分享圖片

2.2 Scrapy_redis之RFPDupeFilter

RFPDupeFilter 實現了對request對象的加密

技術分享圖片

2.3 Scrapy_redis之Scheduler

scrapy_redis調度器的實現了決定什麽時候把request對象加入帶抓取的隊列,同時把請求過的request對象過濾掉

技術分享圖片

由此可以總結出request對象入隊的條件

  • request之前沒有見過
  • request的dont_filter為True,即不過濾
  • start_urls中的url地址會入隊,因為他們默認是不過濾

scrapy_redis實現爬蟲