Python網絡爬蟲(十七)——Scrapy架構

概述

對於爬蟲來說,整個爬蟲包括了網絡請求、數據解析、數據請求、設置代理、多線程等內容,這些部分在之前的內容中都分別進行了說明。因此如果在之前要完成一個爬蟲的話,就要使用上面提到的所有工具,從頭開始一步一步構建自己的爬蟲,這無疑是一項繁瑣的工作,而 Scrapy 解決了這個問題。

Scrapy 則實現了上邊的所有功能,Scrapy 通過將基本的功能進行封裝,從而提高了開發的效率。而正是因爲它強大的功能,使得它也區別於之前提到的實現某一項功能的工具。這裏先說明 Scrapy 框架。

數據流

上邊紅色的箭頭就表示了數據的流動。Engine 控制 Scrapy 中的數據流動,具體爲:

  1. Engine 從 Spider 獲取初始爬取請求
  2. Engine 在 Scheduler 中進行請求調度,並請求下一個爬取請求
  3. Scheduler 返回下一個請求到 Engine
  4. Engine 通過 Downloader Middlewares 發送請求到 Downloader
  5. 頁面完成下載後,Downloader 生成頁面的響應信息並通過 Downloader Midderwares 將之發送到 Engine
  6. Engine 接收到來自 Downloader 的響應信息,並通過 Spider Midderwares 將之發送到 Spider 進行處理
  7. Spider 通過 Spider Middlewares 處理響應並將廢棄項和新請求返回到 Engine
  8. Engine 發送處理項到 Item Pipelines,然後發送處理請求到 Scheduler 並詢問下一個爬取請求
  9. 該過程一直循環直到 Scheduler 中的請求被處理完畢

Scrapy Engine

Engine 負責控制系統中所有組件之間的數據流動,並在發生某些操作時觸發某些事件

Scheduler

Scheduler 接收 Engine 發來的請求,並在 Engine 請求它們的時候使之隊列化進行數據流動

Downloader

Downloader 負責獲取網頁並將之反饋到 Engine,Engine 再將之反饋給 Spider

Spiders

Spiders 是用戶編寫的自定義類,用於解析響應和提取信息

Item Pipeline

Item Pipeline 負責在 Spiders 提取信息的時候對信息進行處理, 主要包括清理、驗證和存儲

Downloader middlewares

Downloader middlewares 位於 Engine 和 Downloader 之間,主要是處理從 Engine 到 Downloader 的請求和從 Downloader 到 Engine 的響應。可以用來:

  • 在將請求發送到 Downloader 之前處理請求
  • 在將接收到的響應傳遞給 spider 之前進行更改
  • 發送新的請求而不是將接收到的響應傳遞給 spider
  • 傳遞響應到 spider,而不需要獲取網頁
  • 刪除請求

Spider middlewares

Spider middlewares 位於 Engine 和 Spiders 之間,能夠處理 spider 的輸入(響應)和輸出(信息和請求)。可以用來:

  • spider 回調的後處理輸出——更改/添加/刪除請求或信息
  • start_requests 後處理
  • 處理 spider 異常
  • 對某些基於響應內容的請求調用 errback 而不是 callback

Event-driven networking

Scrapy 是由 Twisted(一個大衆的事件驅動的 python 網絡框架),因此是非阻塞的(異步)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章