Scrapy爬蟲數據架構圖

Scrapy是基於用Python寫的一個流行的事件驅動網絡框架Twisted編寫的。因此,它使用非阻塞(即異步)代碼實現併發。

舊版Scrapy架構圖 :

新版Scrapy架構圖 :

Scrapy中的數據流由執行引擎控制,如下所示:

  1. Engine獲得從爬行器中爬行的初始請求。
  2. Engine在調度程序中調度請求,並請求下一次抓取請求。
  3. 調度程序將下一個請求返回到引擎。
  4. 引擎將請求發送到下載器,通過下載器中間件(請參閱process_request())。
  5. 頁面下載完成後,下載器生成一個響應(帶有該頁面)並將其發送給引擎,通過下載器中間件(請參閱process_response())。
  6. 引擎從下載加載程序接收響應,並將其發送給Spider進行處理,並通過Spider中間件(請參閱process_spider_input())。
  7. Spider處理響應,並向引擎返回報廢的項和新請求(要跟蹤的),通過Spider中間件(請參閱process_spider_output())。
  8. 引擎將已處理的項目發送到項目管道,然後將已處理的請求發送到調度程序,並請求可能的下一個請求進行抓取。
  9. 這個過程重複(從第1步),直到調度程序不再發出請求。

Scrapy各組件介紹:

  • Scrapy Engine  ---  Scrapy引擎 :

Scrapy Engine 負責 Spider、ItemPipeline、Downloader、Scheduler 中間的通訊,信號、數據傳遞等。

  • Scheduler  ---  調度器 :

Scheduler  負責接收 引擎 發送過來的Request請求,並按照一定的方式進行整理排列,入隊,當引擎需要時,交還給 引擎。

  • Downloader  ---  下載器 :

Downloader  負責下載 Scrapy Engine(引擎) 發送的所有Requests請求,並將其獲取得到的Responses交還給 Scrapy Engine(引擎) ,由 引擎 交給 Spider 處理,

  • spider  ---  爬蟲 :

spider  負責處理所有的Responses,從中分析提取數據,獲取Item字段需要的數據,並將需要跟進的URL提交給 引擎,再次進入 Scheduler(調度器),

  • Item Pipeline --- 項目管道 :

Item Pipeline 負責處理 Spider 中獲取到的Item,並進行後期處理(詳細分析、過濾、存儲等)的地方。

  • Downloader Middlewares  ---  下載中間件 :

Downloader Middlewares 可以當作是一個可以自定義擴展下載功能的組件。

  • Spider Middlewares  --- 爬蟲中間件 :

你可以理解爲是一個可以自定義擴展和操作 引擎 和 Spider 中間 通信 的功能(比如進入 Spider 的Responses,和從 Spider 出去的Requesrs)

使用Spider中間件場景:

  1. Spider回調的後處理輸出-更改/添加/刪除請求或項;
  2. 後處理start_requests;
  3. 處理Spider異常;
  4. 對一些基於響應內容的請求調用errback而不是回調。

如果您需要執行以下操作之一,請使用下載器中間件:

  1. 在將請求發送到Downloader之前處理請求(即在Scrapy將請求發送到網站之前);
  2. 更改在傳遞給Spider之前收到響應;
  3. 發送一個新的請求,而不是將接收到的響應傳遞給爬行器;
  4. 將響應傳遞給Spider,而不獲取web頁面;
  5. 靜靜地丟掉一些請求。

Scrapy的運作流程 :

代碼寫好,程序開始運行 ...

  1. 引擎 :Hi!Spider ,你要處理哪一 個網站?
  2. Spider :老大要我處理 xxx .com.T
  3. 引擎 :你把第一個需要處理的URL給我吧。
  4. Spider :給你,第一個URL是 xxxxxx .com。
  5. 引擎 :Hi!調度器,我這有request請求你幫我排序入隊一下。
  6. 調度器 :好的,正在處理你等一下。
  7. 引擎 :Hi!調度器 ,把你處理好的request請求給我。
  8. 調度器 :給你,這是我處理好的request
  9. 引擎 :Hi!下載器,你按照老大的 下載中間件 的設置幫我下載一下這個request請求
  10. 下載器 :好的!給你,這是下載好的東西。(如果失敗:sorry,這個request下載失敗了。然後 引擎 告訴 調度器 ,這個request下載失敗了,你記錄一下,我們待會兒再下載)
  11. 引擎 :Hi!Spider,這是下載好的東西,並且已經按照老大的 下載中間件 處理過了,你自己處理一 下
    (注意!這兒responses默認是交給 def parse() 這個函數處理的)

製作Scrapy爬蟲 一共需要4步:

  • 新建項目 (scrapyQtartproject xxx):新建一個新的爬蟲項目
  • 明確目標 (編寫items.py):明確你想要抓取的目標
  • 製作爬蟲 (spiders/xxspider.py):製作爬蟲開始爬取網頁
  • 存儲內容( (pipelines.py):設計管道存儲爬取內容

 

 

 

 

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