【scrapy】流程大致分析
阿新 • • 發佈:2017-11-28
下一個 跟著 數據 定義 gin war 自定義輸出 -s 結果
Scrapy流程分析
Scrapy 是一個重型爬蟲框架。主要分為5部分:引擎(Engine)、調度器(Scheduler)(這個不太熟悉)、下載器(Downloader) 、爬蟲(Spider)、管道(Item Pipeline)。
- Engine是scrapy的核心,主要負責調度各個組件,保證數據流轉。其中包括每五秒自動運行的呼吸函數。
- Scheduler負責管理任務、過濾任務、輸出任務的調度器,存儲、去重(中間件??)
- Downloader 負責從網頁上下載網頁數據,吐給調度器處——吐給spider處理——吐給pipeline進行存儲處理
- Spider 爬蟲
- Item Pipeline負責輸出結構化數據,可自定義輸出位置(文件、MYSQL、MangoDB..)
- 中間件:除了以上五個部分,還有中間件也是非常重要的。中間件主要分為兩種:Downloader Middlewares(下載中間件)、Spider Middlewares(爬蟲中間件)。主要用於過濾、處理下載的數據或者爬蟲的返回值
流程圖如下:
scrapy流程圖(自己瞎畫的)
流程概述:
- Engine從爬蟲中獲取初始化請求(種子URL)
- Engine把該請求放入Scheduler中, 同時獲取下一個請求(這兩為異步)
- Scheduler返回給Engine一個待下載的請求
- Engine發送請求給下載器,中間會經過Downloader Middlewares的過濾
- 這個請求通過下載器下載完成後,生成一個相應對象(response),這個對象將被返回給Engine,中間需要經過一次Downloader Middlewares。
- Engine接受到對象之後,發送給爬蟲,中間會經過一系列的Spider Middlewares。
- 在爬蟲中執行相應的自定義邏輯。執行完邏輯之後,爬蟲執行相應的回調方法,處理得到的數據或者新的request請求。將這個結果發送給Engine,中間經過一系列Spider Middlewares
- Engine得到返回值,若是requests則再執行2, 若是對象則交由Pipeline處理
- 從1開始重復,直到調度器中沒有新的請求。
參考: Scrapy源碼閱讀分析<一>
跟著大佬走了一遍,還是似懂非懂,但是受益匪淺。
自己修為還差得遠..再走幾遍再走幾遍
【scrapy】流程大致分析