淺析scrapy與scrapy-redis的區別


  首先,要了解兩者的區別,就要清楚scrapy-redis是如何產生的,有需求才會有發展,社會在日新月異的飛速發展,大量相似網頁框架的飛速產生,人們已經不滿足於當前爬取網頁的速度,因此有了分布式爬蟲,讓其可以並行的爬取更多但又不盡相同的網頁,這樣大大節省了之前同步完成頁面爬取所浪費的時間,同步與異步的差距不是一點點的,所以scrapy-redis更加適應於當前形勢。好了,步入正軌。

  兩者的主要區別就是scrapy-redis在scrapy的基礎上增加了redis數據庫,同時呢,由於這個redis數據庫的存在,就導致了幾大新增組件應運而生,---可以實現分布式爬蟲,---簡單url去重,---持續性爬取,增量式爬蟲,---以及遵守Rule規則可以實現深度爬蟲等等。下面具體闡述在redis加入之后造成的具體模塊改變。

一、Scheduler(調度器模塊)

  Scheduler 負責對新的 request 迕行入列和出列的操作。 Scrapy 本身丌支持爬蟲分布式,多個 spider 丌能共享待爬取隊列 Scrapy queue, scrapy-redis 把 Scrapy queue 換成 redis 數據庫,用同一個 redis-server 存放要爬 取的 request,便能讓多個 spider 去同一個數據庫里讀取。

二、Duplication Filter(redis  set去重)

  Duplication Filter 利用了 redis 的 set 不重復的特性實現去重 scrapy-redis 調度器從引擎接受 request,將 request 的指紋存⼊redis 的 set 檢查是否重 復,並將丌重復的 request push 寫⼊redis 的 request queue。引擎請求 request(Spider 發出的)時,調度器從 redis 的 request queue 隊列⾥里根據優 先級 pop 出⼀個 request 迒回給引擎,引擎將此 request 發給 spider 處理。

三、Item Pipeline(管道模塊)

  引擎將爬取到的 Item 傳給 Item Pipeline,scrapy-redis 的 Item Pipeline 將爬取到的 Item 存⼊redis 的 items queue。

四、Base Spider(爬蟲模塊)

  不再使用 scrapy 原有的 Spider 類,重寫的 RedisSpider 繼承了 Spider 和 RedisMixin 返 兩個類,RedisMixin 是用來從 redis 讀取 url 的類。 當我們生成一個 Spider 繼承 RedisSpider 時,調用 setup_redis 函數,返個函數會去連接 redis 數據庫,然后會設置 signals(信號): 一 個 是 當 spider 空 閑 時 候 的 signal , 會 調 用 spider_idle 函 數 , 返 個 函 數 調 用 schedule_next_request 函數,保證 spider 是一直活着的狀態,並且拋出DontCloseSpider 異常。 一個是當抓到一個 item 時的 signal,會調用 item_scraped 函數,返個函數會調用 schedule_next_request 函數,獲取下一個 request。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM