一、Scrapy架構圖
1、Scrapy Engine(引擎): 引擎負責控制數據流在系統的所有組件中流動,並在相應動作發生時觸發事件。
2、Scheduler(調度器): 調度器從引擎接受request並將他們入隊,以便之后引擎請求他們時提供給引擎。
3、Downloader(下載器): 下載器負責獲取頁面數據並提供給引擎,而后提供給spider。
4、Spider(爬蟲): Spider是Scrapy用戶編寫用於分析response並提取item(即獲取到的item)或額外跟進的URL的類。 每個spider負責處理一個特定(或一些)網站。
5、Item Pipeline(管道): Item Pipeline負責處理被spider提取出來的item。典型的處理有清理、 驗證及持久化(例如存儲到數據庫中)。
6、Downloader Middlewares(下載中間件): 下載器中間件是在引擎及下載器之間的特定鈎子(specific hook),處理Downloader傳遞給引擎的response。 其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能。
7、Spider Middlewares(Spider中間件): Spider中間件是在引擎及Spider之間的特定鈎子(specific hook),處理spider的輸入(response)和輸出(items及requests)。 其提供了一個簡便的機制,通過插入自定義代碼來擴展Scrapy功能。
1)當爬蟲(Spider)要爬取某URL地址的頁面時,使用該URL初始化Request對象提交給引擎(Scrapy Engine),並設置回調函數。
Spider中初始的Request是通過調用start_requests() 來獲取的。start_requests() 讀取start_urls 中的URL,並以parse為回調函數生成Request 。
2)Request對象進入調度器(Scheduler)按某種算法進行排隊,之后的每個時刻調度器將其出列,送往下載器。
3)下載器(Downloader)根據Request對象中的URL地址發送一次HTTP請求到網絡服務器把資源下載下來,並封裝成應答包(Response)。
4)應答包Response對象最終會被遞送給爬蟲(Spider)的頁面解析函數進行處理。
5)若是解析出實體(Item),則交給實體管道(Item Pipeline)進行進一步的處理。
由Spider返回的Item將被存到數據庫(由某些Item Pipeline處理)或使用Feed exports存入到文件中。
6)若是解析出的是鏈接(URL),則把URL交給調度器(Scheduler)等待抓取。
以上就是Scrapy框架的運行流程,也就是它的工作原理。Request和Response對象是血液,Item是代謝產物。