Scrapy框架主要由五大組件組成,它們分別是調度器(Scheduler)、下載器(Downloader)、爬蟲(Spider)和實體管道(Item Pipeline)、Scrapy引擎(Scrapy Engine)。下面咱們分別介紹各個組件的做用。segmentfault
調度器,說白了能夠想像成一個URL(抓取網頁的網址或者說是連接)的優先隊列,由它來決定下一個要抓取的網址是什麼,同時去除重複的網址(不作無用功)。用戶能夠跟據本身的需求定製調度器。網絡
下載器,是全部組件中負擔最大的,它用於高速地下載網絡上的資源。Scrapy的下載器代碼不會太複雜,但效率高,主要的緣由是Scrapy下載器是創建在twisted這個高效的異步模型上的(其實整個框架都在創建在這個模型上的)。框架
爬蟲,是用戶最關心的部份。用戶定製本身的爬蟲,用於從特定的網頁中提取本身須要的信息,即所謂的實體(Item)。用戶也能夠從中提取出連接,讓Scrapy繼續抓取下一個頁面。異步
實體管道,用於處理爬蟲提取的實體。主要的功能是持久化實體、驗證明體的有效性、清除不須要的信息。ide
Scrapy引擎是整個框架的核心。它用來控制調試器、下載器、爬蟲。實際上,引擎至關於計算機的CPU,它控制着整個流程。spa
Scrapy運行流程大概以下:調試
首先,引擎從調度器中取出一個連接(URL)用於接下來的抓取隊列
引擎把URL封裝成一個請求(Request)傳給下載器,下載器把資源下載下來,並封裝成應答包(Response)ip
而後,爬蟲解析Response資源
如果解析出實體(Item),則交給實體管道進行進一步的處理。
如果解析出的是連接(URL),則把URL交給Scheduler等待抓取