教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢(xún)/投訴熱線(xiàn):400-618-4000

Scrapy框架的運(yùn)行流程詳解

更新時(shí)間:2021年06月09日14時(shí)24分 來(lái)源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

Scrapy的運(yùn)作流程由引擎控制,其過(guò)程如下:

(1)引擎向Spiders請(qǐng)求第個(gè)要爬取的URL(s)。

(2)引擎從Spiders中獲取到第一個(gè)要爬取的URL,封裝成Request并交給調(diào)度器。

(3)引擎向調(diào)度器請(qǐng)求下一個(gè)要爬取的Request。

(4)調(diào)度器返回下一個(gè)要爬取的Request給引擎,引擎將Request 通過(guò)下載中間件轉(zhuǎn)發(fā)給下載器。

(5)一旦頁(yè)面下載完畢,下載器生成一個(gè)該頁(yè)面的Response,并將其通過(guò)下載中間件發(fā)送給引擎。

(6)引擎從下載器中接收到Response并通過(guò)Spider中間件發(fā)送給Spider處理。

(7)Spider處理Response并返回爬取到的Item及新的Request給引擎。

(8)引擎將爬取到的Item給Item Pipeline,將Request給調(diào)度器。

(9)從第(2)步開(kāi)始重復(fù),直到調(diào)度器中沒(méi)有更多的Request。


為了幫助大家更好地理解Scrapy的一次完整運(yùn)行流程,下面把Scrapy的運(yùn)作流程用擬人小劇場(chǎng)的方式進(jìn)行表現(xiàn),如下所示:

(1)引擎: Hi! Spider,你要處理哪一個(gè)網(wǎng)站?

(2)Spider:老大要我處理xxx.om。

(3)引擎:你把第一個(gè)需要處理的URL給我吧。

(4)Spider: 給你,第一個(gè)URL是xxxxx.om。

(5)引擎: Hi!調(diào)度器,我這有Request請(qǐng)求,你幫我排序入隊(duì)一下。

(6)調(diào)度器:好的,正在處理,你等一下。

(7)引擎: Hi!調(diào)度器,把你處理好的Request請(qǐng)求給我。

(8)調(diào)度器:給你,這是我處理好的Requesto

(9)引擎: Hi!下載器,你按照老大的下載中間件的設(shè)置幫我下載一下這個(gè)Request請(qǐng)求。

(10)下載器:好的!給你,這是下載好的東西。(如果失敗: Sorry,這個(gè)Request下載失敗了。然后引擎告訴調(diào)度器,這個(gè)Request 下載失敗了,你記錄一下,我們待會(huì)兒再下載)。

(11)引擎: Hi! Spider, 這是下載好的東西,并且已經(jīng)按照老大的下載中間件處理過(guò)了,你自己處理一下(注意!這兒Responses默認(rèn)是交給def parse(這個(gè)函數(shù)處理的)。

(12) Spider:(處理完畢數(shù)據(jù)之后對(duì)于需要跟進(jìn)的URL),Hi!引擎,我這里有兩個(gè)結(jié)果,這個(gè)是我需要跟進(jìn)的URL,還有這個(gè)是我獲取到的Item數(shù)據(jù)。

(13) 引擎: Hi!管道,我這兒有個(gè)item你幫我處理一下!調(diào)度器!這是需要跟進(jìn)的URL你幫我處理下。

(14)管道,調(diào)度器:好的,現(xiàn)在就做!

然后,從第(4)步開(kāi)始循環(huán),直到獲取完老大需要的全部信息。



猜你喜歡:

Python爬蟲(chóng)難學(xué)嗎?學(xué)會(huì)需要多久?

Python的標(biāo)準(zhǔn)模塊:sys、os、random和time

Python爬蟲(chóng)支持的網(wǎng)頁(yè)解析技術(shù)有哪些?

黑馬程序員python+大數(shù)據(jù)培訓(xùn)課程

0 分享到:
和我們?cè)诰€(xiàn)交談!