Scrapy框架主要由五大組件組成,它們分別是調(diào)度器(Scheduler)、下載器(Downloader)、爬蟲(Spider)和實(shí)體管道(Item Pipeline)、Scrapy引擎(Scrapy Engine)。下面我們分別介紹各個(gè)組件的作用。
調(diào)度器
調(diào)度器,說白了可以想像成一個(gè)URL(抓取網(wǎng)頁的網(wǎng)址或者說是鏈接)的優(yōu)先隊(duì)列,由它來決定下一個(gè)要抓取的網(wǎng)址是什么,同時(shí)去除重復(fù)的網(wǎng)址(不做無用功)。用戶可以跟據(jù)自己的需求定制調(diào)度器。
下載器
下載器,是所有組件中負(fù)擔(dān)最大的,它用于高速地下載網(wǎng)絡(luò)上的資源。Scrapy的下載器代碼不會(huì)太復(fù)雜,但效率高,主要的原因是Scrapy下載器是建立在twisted這個(gè)高效的異步模型上的(其實(shí)整個(gè)框架都在建立在這個(gè)模型上的)。
爬蟲
爬蟲,是用戶最關(guān)心的部份。用戶定制自己的爬蟲,用于從特定的網(wǎng)頁中提取自己需要的信息,即所謂的實(shí)體(Item)。用戶也可以從中提取出鏈接,讓Scrapy繼續(xù)抓取下一個(gè)頁面。
實(shí)體管道
實(shí)體管道,用于處理爬蟲提取的實(shí)體。主要的功能是持久化實(shí)體、驗(yàn)證實(shí)體的有效性、清除不需要的信息。
Scrapy引擎
Scrapy引擎是整個(gè)框架的核心。它用來控制調(diào)試器、下載器、爬蟲。實(shí)際上,引擎相當(dāng)于計(jì)算機(jī)的CPU,它控制著整個(gè)流程。

Scrapy運(yùn)行流程大概如下:
首先,引擎從調(diào)度器中取出一個(gè)鏈接(URL)用于接下來的抓取
引擎把URL封裝成一個(gè)請(qǐng)求(Request)傳給下載器,下載器把資源下載下來,并封裝成應(yīng)答包(Response)
然后,爬蟲解析Response
若是解析出實(shí)體(Item),則交給實(shí)體管道進(jìn)行進(jìn)一步的處理。
若是解析出的是鏈接(URL),則把URL交給Scheduler等待抓取
數(shù)據(jù)在整個(gè)Scrapy的流向:
程序運(yùn)行的時(shí)候,
引擎:Hi!Spider, 你要處理哪一個(gè)網(wǎng)站?
Spiders:我要處理23wx.com
引擎:你把第一個(gè)需要的處理的URL給我吧。
Spiders:給你第一個(gè)URL是XXXXXXX.com
引擎:Hi!調(diào)度器,我這有request你幫我排序入隊(duì)一下。
調(diào)度器:好的,正在處理你等一下。
引擎:Hi!調(diào)度器,把你處理好的request給我,
調(diào)度器:給你,這是我處理好的request
引擎:Hi!下載器,你按照下載中間件的設(shè)置幫我下載一下這個(gè)request
下載器:好的!給你,這是下載好的東西。(如果失?。翰缓靡馑?,這個(gè)request下載失敗,然后引擎告訴調(diào)度器,這個(gè)request下載失敗了,你記錄一下,我們待會(huì)兒再下載。)
引擎:Hi!Spiders,這是下載好的東西,并且已經(jīng)按照Spider中間件處理過了,你處理一下(注意!這兒responses默認(rèn)是交給def parse這個(gè)函數(shù)處理的)
Spiders:(處理完畢數(shù)據(jù)之后對(duì)于需要跟進(jìn)的URL),Hi!引擎,這是我需要跟進(jìn)的URL,將它的responses交給函數(shù) def xxxx(self, responses)處理。還有這是我獲取到的Item。
引擎:Hi !Item Pipeline
我這兒有個(gè)item你幫我處理一下!調(diào)度器!這是我需要的URL你幫我處理下。然后從第四步開始循環(huán),直到獲取到你需要的信息,
注意!只有當(dāng)調(diào)度器中不存在任何request了,整個(gè)程序才會(huì)停止,(也就是說,對(duì)于下載失敗的URL,Scrapy會(huì)重新下載。)
以上就是Scrapy整個(gè)流程了。
引用來自—靜覓