一.Scrapy五大核心組件工作流程
1.核心組件
# 引擎(Scrapy)
對整個系統的數據流進行處理, 觸發事務(框架核心).
# 調度器(Scheduler)
用來接受引擎發過來的請求. 由過濾器過濾重復的url並將其壓入隊列中, 在引擎再次請求的時候返回. 可以想像成一個URL(抓取網頁的網址或者說是鏈接)的優先隊列, 由它來決定下一個要抓取的網址是什么.
# 下載器(Downloader)
用於下載網頁內容, 並將網頁內容返回給蜘蛛(Scrapy下載器是建立在twisted這個高效的異步模型上的).
# 爬蟲(Spiders)
爬蟲是主要干活的, 它可以生成url, 並從特定的url中提取自己需要的信息, 即所謂的實體(Item). 用戶也可以從中提取出鏈接, 讓Scrapy繼續抓取下一個頁面.
# 項目管道(Pipeline)
負責處理爬蟲從網頁中抽取的實體, 主要的功能是持久化實體、驗證實體的有效性、清除不需要的信息. 當頁面被爬蟲解析后, 將被發送到項目管道, 並經過幾個特定的次序處理數據.
2.工作流程

- spider中的url被封裝成請求對象交給引擎(每一個url對應一個請求對象);
- 引擎拿到請求對象之后, 將其全部交給調度器;
- 調度器拿到所有請求對象后, 通過內部的過濾器過濾掉重復的url, 最后將去重后的所有url對應的請求對象壓入到隊列中, 隨后調度器調度出其中一個請求對象, 並將其交給引擎;
- 引擎將調度器調度出的請求對象交給下載器;
- 下載器拿到該請求對象去互聯網中下載數據;
- 數據下載成功后會被封裝到response中, 隨后response會被交給下載器;
- 下載器將response交給引擎;
- 引擎將response交給spiders;
- spiders拿到response后調用回調方法進行數據解析, 解析成功后產生item, 隨后spiders將item交給引擎;
- 引擎將item交給管道, 管道拿到item后進行數據的持久化存儲.