Scrapy架構概覽及數(shù)據(jù)流

Scrapy架構概覽圖

Scrapy 架構概覽

1、Scrapy Engine
  Scrapy的核心引擎,負責控制數(shù)據(jù)在系統(tǒng)所有組件中的流動,并在相應動作發(fā)生時觸發(fā)事件,相當于整個框架的總指揮。

2、調(diào)度器
  調(diào)度器(Scheduler)可以被看作一個優(yōu)先級隊列。它從核心引擎接受request并將它們?nèi)腙?,以便之后引擎請求它們時按照優(yōu)先級提供給引擎。

3、下載器
  下載器(Download)負責和網(wǎng)絡交,主要作用是獲取頁面數(shù)據(jù)并提供給引擎,而后提供給spider做解析,下載器在整個Scrapy架構中應該是負擔最重的組件,由于其需要和網(wǎng)絡交互,直接影響Scrapy的爬取效率。

4、Spiders
  Spiders是Sprapy用戶編寫用于分析response并提取item(即獲取到的item)或額外跟進URL的類。對用戶編寫爬蟲而言,它是最重要的組件。用戶可以在同一個項目中編寫多個spider,每個spider負責處理一個特定(或一些)的網(wǎng)站。

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

6、下載器中間件
  下載器中間件(Download Middlewares)是在核心引擎及下載器之間的特定鉤子,負責處理引擎?zhèn)鬟f給下載器的request和下載器傳遞給引擎的response。其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能。

7、爬蟲中間件
  爬蟲中間件(Spider Middlewares)是在核心引擎及spider之間的特定鉤子,處理spider的輸入(response)和輸出(items及requests)。其提供了一個簡便的機制,過插入自定義代碼來擴展Scrapy功能。

Scrapy 數(shù)據(jù)流詳解

當啟動Scrapy爬蟲時,Scrapy 會產(chǎn)生以下幾個動作:

(1) 引擎將start_urls列表中的URL加近調(diào)度器(Scheduler)調(diào)度。如果重寫了start_urls方法,就將最新方法中的URL加近調(diào)度器。

(2) 引擎向調(diào)度器請求下一個要爬取的URL。

(3) 調(diào)度器給引擎返回下一個要爬取的URL,引擎將URL通過下載中間件【請求(request)方向】轉(zhuǎn)發(fā)給下載器(Downloader)。

(4) 一旦頁面下載完畢,下載器生成一個該頁面的response,并將其通過下載中間件【返回(response)方向】發(fā)送給引擎。

(5) 引擎將下載器中接收到的response并通過爬蟲中間件(輸入方向)發(fā)送給spider處理。

(6) spider根據(jù)編寫的提取邏輯,處理response并給引擎返回爬取到的Item及(根據(jù)規(guī)則跟進的url)新的request。

(7) 引擎將(spider返回的)爬取到的Item給Item Pipeline,將(spider返回的)request給調(diào)度器。

(8) 從第二步重復直到調(diào)度器中沒有更多的request,引擎關閉該爬蟲。

每天進步一點點, To bend over backwards!

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

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