天天看點

Scrapy架構介紹

架構介紹

Scrapy架構介紹

五個元件

  • Scrapy Engine(Scrapy引擎)
  • Scheduler(排程器)
  • Downloader(下載下傳器)
  • Spiders(蜘蛛)
  • Item Pipeline(項目管道)

五大元件及其中間件的功能如下:

  1. Scrapy引擎:控制整個系統的資料處理流程,觸發事務處理流程,負責串聯各個子產品
  2. Scheduler(排程器):維護待爬取的URL隊列,當接受引擎發送的請求時,會從待爬取的URL隊列中取出下一個URL傳回給排程器(Scheduler)。
  3. Downloader(下載下傳器):向該網絡伺服器發送下載下傳頁面的請求,用于下載下傳網頁内容,并将網頁内容交與蜘蛛(Spiders)去處理。
  4. Spiders(蜘蛛):制定要爬取的網站位址,選擇所需資料内容,定義域名過濾規則和網頁的解析規則等。
  5. Item Pipeline(項目管道):處理由蜘蛛(Spiders)從網頁中抽取的資料,主要任務是清洗、驗證、過濾、去重和存儲資料等。
  6. Middlewares(中間件):中間件是處于Scrapy引擎和Scheduler,Downloader,Spiders之間的構件,主要是處理它們之間的請求及響應。

    Downloader Middlewares,下載下傳器中間件,位于引擎和下載下傳器之間的鈎子架構,主要是處理引擎與下載下傳器之間的請求及響應。

    Spider Middlewares, 蜘蛛中間件,位于引擎和蜘蛛之間的鈎子架構,主要工作是處理蜘蛛輸入的響應和輸出的結果及新的請求。

  1. 項目(Item):它定義了爬取結果的資料結構,爬取的資料會被指派成該對象。

爬取過程

Scrapy引擎發送請求,之後排程器(Scheduler)把初始URL交給下載下傳器(Downloader),然後下載下傳器(Downloader)向伺服器發送服務請求,得到響應後将下載下傳的網頁内容交與蜘蛛(Spiders)來處理,然後蜘蛛會對網頁進行詳細的解析。蜘蛛分析的結果有兩種:一種是得到新的URL,之後再次請求排程器,開始進行新一輪的爬取,不斷的重複上述過程;另一種是得到所需的資料,之後會轉交給項目管道繼續處理。項目管道負責資料的清洗、驗證、過濾、去重和存儲等後期處理,最後由Pipeline輸出到檔案中,或者存入資料庫等。

補:

Scrapy 中的資料流由引擎控制,其過程如下:

  • Engine 首先打開一個網站,找到處理該網站的 Spider 并向該 Spider 請求第一個要爬取的 URL。
  • Engine 從 Spider 中擷取到第一個要爬取的 URL 并通過 Scheduler 以 Request 的形式排程。
  • Engine 向 Scheduler (排程器)請求下一個要爬取的 URL。
  • Scheduler(排程器) 傳回下一個要爬取的 URL 給 Engine,Engine 将 URL 通過 Downloader Middlewares (下載下傳器中間件)轉發給 Downloader (下載下傳器)下載下傳。
  • 一旦頁面下載下傳完畢, Downloader(下載下傳器) 生成一個該頁面的 Response,并将其通過 Downloader Middlewares (下載下傳器中間件)發送給 Engine。
  • Engine 從下載下傳器中接收到 Response(響應) 并通過 Spider Middlewares 發送給 Spider 處理。
  • Spider(蜘蛛) 處理 Response (響應)并傳回爬取到的 Item(項目) 及新的 Request (請求)給 Engine。
  • 重複第二步到最後一步,直到 Scheduler(排程器) 中沒有更多的 Request(請求),Engine 關閉該網站,爬取結束。

通過多個元件的互相協作、不同元件完成工作的不同、元件對異步處理的支援,Scrapy 最大限度地利用了網絡帶寬,大大提高了資料爬取和處理的效率。

項目結構

Scrapy 架構和 pyspider 不同,它是通過指令行來建立項目的,代碼的編寫還是需要 IDE。項目建立之後,項目檔案結構如下所示:

Scrapy架構介紹

在此要将各個檔案的功能描述如下:

  • scrapy.cfg:它是 Scrapy 項目的配置檔案,其内定義了項目的配置檔案路徑、部署相關資訊等内容。
  • items.py:它定義 Item 資料結構,所有的 Item 的定義都可以放這裡。
  • pipelines.py:它定義 Item Pipeline 的實作,所有的 Item Pipeline 的實作都可以放這裡。
  • settings.py:它定義項目的全局配置。
  • middlewares.py:它定義 Spider Middlewares 和 Downloader Middlewares 的實作。
  • spiders:其内包含一個個 Spider 的實作,每個 Spider 都有一個檔案。

參考文章:

一篇文章教會你了解Scrapy網絡爬蟲架構的工作原理和資料采集過程《Python 3 網絡爬蟲開發實戰》13.1-Scrapy架構介紹