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

數據流向

Scrapy的數據流由執行引擎(Engine)控制,其基本過程如下:

  1. 引擎從Spider中獲取到初始Requests。
  2. 引擎將該Requests放入調度器,並請求下一個要爬取的Requests。
  3. 調度器返回下一個要爬取的Requests給引擎
  4. 引擎將Requests通過下載器中間件轉發給下載器(Downloader)。
  5. 一旦頁面下載完畢,下載器生成一個該頁面的Response,並將其通過下載中間件(返回(response)方向)發送給引擎。
  6. 引擎從下載器中接收到Response並通過Spider中間件(輸入方向)發送給Spider處理。
  7. Spider處理Response並返回爬取到的Item及(跟進的)新的Request給引擎。
  8. 引擎將(Spider返回的)爬取到的Item交給ItemPipeline處理,將(Spider返回的)Request交給調度器,並請求下一個Requests(如果存在的話)。
  9. (從第一步)重復直到調度器中沒有更多地Request。

總結

Scrapy的各個組件相互配合執行,有的組件負責任務的調度,有的組件負責任務的下載,有的組件負責數據的清洗保存,各組件分工明確。在組件之間存在middleware的中間件,其作用就是功能的拓展,當然還可以根據自身的需求自定義這些拓展功能,比如我們可以在Downloader middlewares里面實現User-Agent的切換,Proxy的切換等等。這些功能我們會在后續的學習中逐漸拓展。這里只需要大致的了解即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM