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