1,spider打開某網頁,獲取到一個或者多個request,經由scrapy engine傳送給調度器scheduler
request特別多而且速度特別快會在scheduler造成請求隊列queue,由scheduler安排執行
2,schelduler會按照必定的次序取出請求,經由引擎, 下載器中間鍵,發送給下載器dowmloader
這裏的下載器中間鍵是設定在請求執行前,所以能夠設定代理,請求頭,cookie等
3,下載下來的網頁數據再次通過下載器中間鍵,通過引擎,通過爬蟲中間鍵傳送給爬蟲spiders
這裏的下載器中間鍵是設定在請求執行後,所以能夠修改請求的結果
這裏的爬蟲中間鍵是設定在數據或者請求到達爬蟲以前,與下載器中間鍵有相似的功能
4,由爬蟲spider對下載下來的數據進行解析,按照item設定的數據結構經由爬蟲中間鍵,引擎發送給項目管道itempipeline
這裏的項目管道itempipeline能夠對數據進行進一步的清洗,存儲等操做
這裏爬蟲極有可能從數據中解析到進一步的請求request,它會把請求經由引擎從新發送給調度器shelduler,調度器循環執行上述操做
5,項目管道itempipeline管理着最後的輸出
Scrapy數據流是由執行的核心引擎(engine)控制,流程是這樣的:數據庫
一、爬蟲引擎得到初始請求開始抓取。
二、爬蟲引擎開始請求調度程序,並準備對下一次的請求進行抓取。
三、爬蟲調度器返回下一個請求給爬蟲引擎。
四、引擎請求發送到下載器,經過下載中間件下載網絡數據。
五、一旦下載器完成頁面下載,將下載結果返回給爬蟲引擎。
六、引擎將下載器的響應經過中間件返回給爬蟲進行處理。
七、爬蟲處理響應,並經過中間件返回處理後的items,以及新的請求給引擎。
八、引擎發送處理後的items到項目管道,而後把處理結果返回給調度器,調度器計劃處理下一個請求抓取。
九、重複該過程(繼續步驟1),直到爬取完全部的url請求。cookie
爬蟲引擎負責控制各個組件之間的數據流,當某些操做觸發事件後都是經過engine來處理。網絡
調度接收來engine的請求並將請求放入隊列中,並經過事件返回給engine。數據結構
經過engine請求下載網絡數據並將結果響應給engine。scrapy
Spider發出請求,並處理engine返回給它下載器響應數據,以items和規則內的數據請求(urls)返回給engine。ide
負責處理engine返回spider解析後的數據,而且將數據持久化,例如將數據存入數據庫或者文件。url
下載中間件是engine和下載器交互組件,以鉤子(插件)的形式存在,能夠代替接收請求、處理數據的下載以及將結果響應給engine。插件
spider中間件是engine和spider之間的交互組件,以鉤子(插件)的形式存在,能夠代替處理response以及返回給engine items及新的請求集。
代理