天天看點

scrapy架構_入門Scrapy架構看這一篇文章就夠了

scrapy架構_入門Scrapy架構看這一篇文章就夠了
scrapy架構_入門Scrapy架構看這一篇文章就夠了

前言

scrapy架構_入門Scrapy架構看這一篇文章就夠了

Scrapy是一個非常優秀的架構,操作簡單,拓展友善,是比較流行的爬蟲解決方案。

Scrapy是一個用Python寫的Crawer Framework,簡單輕巧而且非常友善。Scrapy使用Twisted這個異步網絡庫來處理網絡通信,架構清晰,并且包含了各種中間件接口,可以靈活的完成各種需求。

scrapy架構_入門Scrapy架構看這一篇文章就夠了

Scrayp架構的優勢

scrapy架構_入門Scrapy架構看這一篇文章就夠了

1. 容易建構大規模抓取項目

2. 異步處理請求的速度快

3. 使用自動調節機制自動調整爬取速度

scrapy架構_入門Scrapy架構看這一篇文章就夠了

Scrapy架構的架構

scrapy架構_入門Scrapy架構看這一篇文章就夠了

我們知道Scrapy架構是一個快速的,高層次的基于Python的爬蟲架構,抓取web站點并從頁面提取結構化資料,我們隻需要定制幾個子產品就可以輕松實作一個爬蟲。那麼Scrapy架構究竟長的什麼樣子?來看下面這幅圖,這幅圖大家看懂了,其實Scrapy架構就等于學會了一半了

scrapy架構_入門Scrapy架構看這一篇文章就夠了
scrapy架構_入門Scrapy架構看這一篇文章就夠了

有同學可能會問這幅圖是什麼意思呢?咱們分别來解釋一下

Scrapy引擎(Engine)。引擎負責控制資料流在系統的所有元件中流動,并在相應動作發生時觸發事件。其實就相當于汽車的發動機一樣

排程器(Scheduler)。排程器從引擎接收request并将它們入隊,以便引擎請求request時提供給引擎

下載下傳器(Downloader)。下載下傳器負責擷取頁面資料并提供給引擎,而後提供給Spider。

Spider。Spider是Scrapy使用者編寫用于分析response并提取Item或額外跟進的URL的類。每個Spider負責處理一些特定的網站

ItemPipeline。ItemPipeline負責處理被Spider提取出來的Item。例如存儲到資料庫中

下載下傳中間件(Downloader middlewares)。下載下傳中間件是在引擎和下載下傳器之間,處理Downloader傳遞給引擎的response。同時還可以插入自定義代碼來擴充Scrapy功能

Spider中間件(Spider middlewares)。Spider中間件是在引擎和Spider中間件之間,處理Spider的輸入(response)和輸出(Items及response)。同時還可以插入自定義代碼來擴充Scrapy功能

看完這些相信很多同學不是特别明白,那麼Scrapy究竟是如何工作的呢?

首先,引擎打開一個網站,找到處理該網站的Spider并向該Spider請求第一個要爬取的URL。引擎從Spider中擷取到第一個要爬取的URL并通過排程器(Scheduler)以requests進行排程。引擎向排程器請求下一個要爬取的URL。

其次,調取器傳回一個要爬取的URL給引擎,引擎将URL通過下載下傳中間件轉發給下載下傳器(Downloader)。一旦也沒下載下傳完畢,下載下傳生成一個該頁面的response,并将其通過下載下傳中間件發送給引擎

最後,引擎從下載下傳器中接收到response并通過Spider中間件發送給Spider處理。Spider處理respone并傳回爬取到的Item,給ItemPipeline,将request給排程器。重複直到排程器中沒有更多的request,引擎關閉該網站

scrapy架構_入門Scrapy架構看這一篇文章就夠了

建立Scrapy項目

scrapy架構_入門Scrapy架構看這一篇文章就夠了

Scrapy項目

scrapy架構_入門Scrapy架構看這一篇文章就夠了

下面我們以爬取汽車之家作為案例,由于頁面結構非常清晰,這裡我們就不去講解了。讓大家感受下Scrapy架構非一般的速度。準備好了嗎?

scrapy架構_入門Scrapy架構看這一篇文章就夠了
scrapy架構_入門Scrapy架構看這一篇文章就夠了

效果展示

scrapy架構_入門Scrapy架構看這一篇文章就夠了
scrapy架構_入門Scrapy架構看這一篇文章就夠了
scrapy架構_入門Scrapy架構看這一篇文章就夠了

相信總有一款是你喜歡的愛車,那還等什麼,趕緊用Scrapy去試試吧

scrapy架構_入門Scrapy架構看這一篇文章就夠了
scrapy架構_入門Scrapy架構看這一篇文章就夠了

繼續閱讀