本文檔介紹了 Scrapy 架構(gòu)及其組件之間的交互。
接下來的圖表展現(xiàn)了 Scrapy 的架構(gòu),包括組件及在系統(tǒng)中發(fā)生的數(shù)據(jù)流的概覽(綠色箭頭所示)。下面對每個組件都做了簡單介紹,并給出了詳細內(nèi)容的鏈接。數(shù)據(jù)流如下所描述。
http://wiki.jikexueyuan.com/project/scrapy/images/4.png" alt="" />
引擎負責(zé)控制數(shù)據(jù)流在系統(tǒng)中所有組件中流動,并在相應(yīng)動作發(fā)生時觸發(fā)事件。 詳細內(nèi)容查看下面的數(shù)據(jù)流(Data Flow)部分。
調(diào)度器從引擎接受 request 并將他們?nèi)腙?,以便之后引擎請求他們時提供給引擎。
下載器負責(zé)獲取頁面數(shù)據(jù)并提供給引擎,而后提供給 spider。
Spider 是 Scrapy 用戶編寫用于分析 response 并提取 item(即獲取到的 item)或額外跟進的 URL 的類。 每個 spider 負責(zé)處理一個特定(或一些)網(wǎng)站。更多內(nèi)容請看 Spiders。
Item Pipeline 負責(zé)處理被 spider 提取出來的 item。典型的處理有清理、驗證及持久化(例如存取到數(shù)據(jù)庫中)。更多內(nèi)容查看 Item Pipeline。
下載器中間件是在引擎及下載器之間的特定鉤子(specific hook),處理 Downloader 傳遞給引擎的 response。 其提供了一個簡便的機制,通過插入自定義代碼來擴展 Scrapy 功能。更多內(nèi)容請看下載器中間件(Downloader Middleware)。
Spider 中間件是在引擎及 Spider 之間的特定鉤子(specific hook),處理 spider 的輸入(response)和輸出(items 及 requests)。其提供了一個簡便的機制,通過插入自定義代碼來擴展 Scrapy 功能。更多內(nèi)容請看 Spider 中間件(Middleware)。
Scrapy 中的數(shù)據(jù)流由執(zhí)行引擎控制,其過程如下:
Scrapy 基于事件驅(qū)動網(wǎng)絡(luò)框架 Twisted 編寫。因此,Scrapy 基于并發(fā)性考慮由非阻塞(即異步)的實現(xiàn)。
關(guān)于異步編程及 Twisted 更多的內(nèi)容請查看下列鏈接: