scrapy_redis實現爬蟲
阿新 • • 發佈:2018-11-06
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實現爬蟲