Scrapy架構及資料流圖簡介

行者武松發表於2018-03-13

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功能。

資料流(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更多的內容請檢視下列連結:

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

本文來自雲棲社群合作伙伴Debian社群,瞭解相關資訊可以關注Debian社群


相關文章