天天看點

Scrapy 架構及資料流圖簡介

Scrapy 是一個為了爬取網站資料,提取結構性資料而編寫的應用架構。 可以應用在包括資料挖掘、資訊處理或存儲曆史資料等一系列的程式中。本文着重介紹 Scrapy 架構及其元件之間的互動。

Scrapy Engine 引擎負責控制資料流在系統中所有元件中流動,并在相應動作發生時觸發事件。 詳細内容檢視下面的資料流(Data Flow)部分。

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

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

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

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

下載下傳器中間件(Downloader middlewares) 下載下傳器中間件是在引擎及下載下傳器之間的特定鈎子(specific hook),處理Downloader傳遞給引擎的response。 其提供了一個簡便的機制,通過插入自定義代碼來擴充Scrapy功能。

Spider中間件(Spider middlewares)  Spider中間件是在引擎及Spider之間的特定鈎子(specific hook),處理spider的輸入(response)和輸出(items及requests)。 其提供了一個簡便的機制,通過插入自定義代碼來擴充Scrapy功能。

Scrapy中的資料流由執行引擎控制,其過程如下:

引擎打開一個網站(open a domain),找到處理該網站的Spider并向該spider請求第一個要爬取的URL(s)。

引擎從Spider中擷取到第一個要爬取的URL并在排程器(Scheduler)以Request排程。

引擎向排程器請求下一個要爬取的URL。

排程器傳回下一個要爬取的URL給引擎,引擎将URL通過下載下傳中間件(請求(request)方向)轉發給下載下傳器(Downloader)。

一旦頁面下載下傳完畢,下載下傳器生成一個該頁面的Response,并将其通過下載下傳中間件(傳回(response)方向)發送給引擎。

引擎從下載下傳器中接收到Response并通過Spider中間件(輸入方向)發送給Spider處理。

Spider處理Response并傳回爬取到的Item及(跟進的)新的Request給引擎。

引擎将(Spider傳回的)爬取到的Item給Item Pipeline,将(Spider傳回的)Request給排程器。

(從第二步)重複直到排程器中沒有更多地request,引擎關閉該網站。

關于異步程式設計及Twisted更多的内容請檢視下列連結:

<a href="http://twistedmatrix.com/documents/current/core/howto/defer-intro.html">Introduction to Deferreds in Twisted</a>

<a href="http://jessenoller.com/2009/02/11/twisted-hello-asynchronous-programming/">Twisted – hello, asynchronous programming</a>

原文釋出時間:2017-07-23