Scrapy-Redis 架構(gòu)分析

scrapy任務(wù)調(diào)度是基于文件系統(tǒng),這樣只能在單機執(zhí)行crawl。
scrapy-redis將待抓取request請求信息和數(shù)據(jù)items信息的存取放到redis queue里,使多臺服務(wù)器可以同時執(zhí)行crawl和items process,大大提升了數(shù)據(jù)爬取和處理的效率。
scrapy-redis是基于redis的scrapy組件,主要功能如下:
? 分布式爬蟲
多個爬蟲實例分享一個redis request隊列,非常適合大范圍多域名的爬蟲集群
? 分布式后處理
爬蟲抓取到的items push到一個redis items隊列,這就意味著可以開啟多個items processes來處理抓取到的數(shù)據(jù),比如存儲到Mongodb、Mysql
? 基于scrapy即插即用組件
Scheduler + Duplication Filter, Item Pipeline, Base Spiders.

scrapy原生架構(gòu)

scrapy.png

調(diào)度器(Scheduler)
調(diào)度器維護request 隊列,每次執(zhí)行取出一個request。

Spiders
Spider是Scrapy用戶編寫用于分析response,提取item以及跟進額外的URL的類。每個spider負責處理一個特定(或一些)網(wǎng)站。

Item Pipeline
Item Pipeline負責處理被spider提取出來的item。典型的處理有清理、驗證數(shù)據(jù)及持久化(例如存取到數(shù)據(jù)庫中)。

scrapy-redis.png

如上圖所示,scrapy-redis在scrapy的架構(gòu)上增加了redis,基于redis的特性拓展了如下組件:

調(diào)度器(Scheduler)
scrapy-redis調(diào)度器通過redis的set不重復的特性,巧妙的實現(xiàn)了Duplication Filter去重(DupeFilter set存放爬取過的request)。
Spider新生成的request,將request的指紋到redis的DupeFilter set檢查是否重復,并將不重復的request push寫入redis的request隊列。
調(diào)度器每次從redis的request隊列里根據(jù)優(yōu)先級pop出一個request, 將此request發(fā)給spider處理。

Item Pipeline
將Spider爬取到的Item給scrapy-redis的Item Pipeline,將爬取到的Item存入redis的items隊列??梢院芊奖愕膹膇tems隊列中提取item,從而實現(xiàn)items processes 集群

總結(jié)
scrapy-redis巧妙的利用redis 實現(xiàn) request queue和 items queue,利用redis的set實現(xiàn)request的去重,將scrapy從單臺機器擴展多臺機器,實現(xiàn)較大規(guī)模的爬蟲集群

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容