Python -- Scrapy 架構概覽

架構概覽

本文檔介紹了Scrapy架構及其組件之間的交互。html

概述數據庫

接下來的圖表展示了Scrapy的架構,包括組件及在系統中發生的數據流的概覽(綠色箭頭所示)。 下面對每一個組件都作了簡單介紹,並給出了詳細內容的連接。數據流以下所描述。編程

 

組件

引擎(Scrapy Engine) 

引擎負責控制數據流在系統中全部組件中流動,並在相應動做發生時觸發事件。 詳細內容查看下面的數據流(Data Flow)部分。網絡

調度器(Scheduler)

調度器從引擎接受request並將他們入隊,以便以後引擎請求他們時提供給引擎。架構

下載器(Downloader)

下載器負責獲取頁面數據並提供給引擎,然後提供給spider。併發

爬蟲(Spiders)

Spider是Scrapy用戶編寫用於分析response並提取item(即獲取到的item)或額外跟進的URL的類。 每一個spider負責處理一個特定(或一些)網站。 更多內容請看 Spiders 。框架

項目管道(Item Pipeline)

Item Pipeline負責處理被spider提取出來的item。典型的處理有清理、 驗證及持久化(例如存取到數據庫中)。 更多內容查看 Item Pipeline 。dom

下載器中間件(Downloader middlewares)

下載器中間件是在引擎及下載器之間的特定鉤子(specific hook),處理Downloader傳遞給引擎的response。 其提供了一個簡便的機制,經過插入自定義代碼來擴展Scrapy功能。更多內容請看 下載器中間件(Downloader Middleware) 。異步

Spider中間件(Spider middlewares)

Spider中間件是在引擎及Spider之間的特定鉤子(specific hook),處理spider的輸入(response)和輸出(items及requests)。 其提供了一個簡便的機制,經過插入自定義代碼來擴展Scrapy功能。更多內容請看 Spider中間件(Middleware) 。scrapy

數據流(Data flow)

Scrapy中的數據流由執行引擎控制,其過程以下:

  1. 引擎打開一個網站(open a domain),找處處理該網站的Spider並向該spider請求第一個要爬取的URL(s)。
  2. 引擎從Spider中獲取到第一個要爬取的URL並在調度器(Scheduler)以Request調度。
  3. 引擎向調度器請求下一個要爬取的URL。
  4. 調度器返回下一個要爬取的URL給引擎,引擎將URL經過下載中間件(請求(request)方向)轉發給下載器(Downloader)。
  5. 一旦頁面下載完畢,下載器生成一個該頁面的Response,並將其經過下載中間件(返回(response)方向)發送給引擎。
  6. 引擎從下載器中接收到Response並經過Spider中間件(輸入方向)發送給Spider處理。
  7. Spider處理Response並返回爬取到的Item及(跟進的)新的Request給引擎。
  8. 引擎將(Spider返回的)爬取到的Item給Item Pipeline,將(Spider返回的)Request給調度器。
  9. (從第二步)重複直到調度器中沒有更多地request,引擎關閉該網站。

事件驅動網絡(Event-driven networking)

Scrapy基於事件驅動網絡框架 Twisted 編寫。所以,Scrapy基於併發性考慮由非阻塞(即異步)的實現。

關於異步編程及Twisted更多的內容請查看下列連接:

相關文章
相關標籤/搜索