最近在學Python,同時也在學如何使用python抓取數據,因而就被我發現了這個很是受歡迎的Python抓取框架Scrapy,下面一塊兒學習下Scrapy的架構,便於更好的使用這個工具。python
1、概述數據庫
下圖顯示了Scrapy的大致架構,其中包含了它的主要組件及系統的數據處理流程(綠色箭頭所示)。下面就來一個個解釋每一個組件的做用及數據的處理過程。編程
2、組件網絡
一、Scrapy Engine(Scrapy引擎)架構
Scrapy引擎是用來控制整個系統的數據處理流程,並進行事務處理的觸發。更多的詳細內容能夠看下面的數據處理流程。框架
二、Scheduler(調度)異步
調度程序從Scrapy引擎接受請求並排序列入隊列,並在Scrapy引擎發出請求後返還給他們。ide
三、Downloader(下載器)異步編程
下載器的主要職責是抓取網頁並將網頁內容返還給蜘蛛( Spiders)。函數
四、Spiders(蜘蛛)
蜘蛛是有Scrapy用戶本身定義用來解析網頁並抓取制定URL返回的內容的類,每一個蜘蛛都能處理一個域名或一組域名。換句話說就是用來定義特定網站的抓取和解析規則。
蜘蛛的整個抓取流程(週期)是這樣的:
五、Item Pipeline(項目管道)
項目管道的主要責任是負責處理有蜘蛛從網頁中抽取的項目,他的主要任務是清晰、驗證和存儲數據。當頁面被蜘蛛解析後,將被髮送到項目管道,並通過幾個特定的次序處理數據。每一個項目管道的組件都是有一個簡單的方法組成的Python類。他們獲取了項目並執行他們的方法,同時他們還須要肯定的是是否須要在項目管道中繼續執行下一步或是直接丟棄掉不處理。
項目管道一般執行的過程有:
六、Downloader middlewares(下載器中間件)
下載中間件是位於Scrapy引擎和下載器之間的鉤子框架,主要是處理Scrapy引擎與下載器之間的請求及響應。它提供了一個自定義的代碼的方式來拓展Scrapy的功能。下載中間器是一個處理請求和響應的鉤子框架。他是輕量級的,對Scrapy盡享全局控制的底層的系統。
七、Spider middlewares(蜘蛛中間件)
蜘蛛中間件是介於Scrapy引擎和蜘蛛之間的鉤子框架,主要工做是處理蜘蛛的響應輸入和請求輸出。它提供一個自定義代碼的方式來拓展Scrapy的功能。蛛中間件是一個掛接到Scrapy的蜘蛛處理機制的框架,你能夠插入自定義的代碼來處理髮送給蜘蛛的請求和返回蜘蛛獲取的響應內容和項目。
八、Scheduler middlewares(調度中間件)
調度中間件是介於Scrapy引擎和調度之間的中間件,主要工做是處從Scrapy引擎發送到調度的請求和響應。他提供了一個自定義的代碼來拓展Scrapy的功能。
3、數據處理流程
Scrapy的整個數據處理流程有Scrapy引擎進行控制,其主要的運行方式爲:
4、驅動器
Scrapy是由Twisted寫的一個受歡迎的Python事件驅動網絡框架,它使用的是非堵塞的異步處理。若是要得到更多關於異步編程和Twisted的信息,請參考下面兩條連接。