更新時間:2021-06-09 來源:黑馬程序員 瀏覽量:
Scrapy的運作流程由引擎控制,其過程如下:
(1)引擎向Spiders請求第個要爬取的URL(s)。
(2)引擎從Spiders中獲取到第一個要爬取的URL,封裝成Request并交給調(diào)度器。
(3)引擎向調(diào)度器請求下一個要爬取的Request。
(4)調(diào)度器返回下一個要爬取的Request給引擎,引擎將Request 通過下載中間件轉(zhuǎn)發(fā)給下載器。
(5)一旦頁面下載完畢,下載器生成一個該頁面的Response,并將其通過下載中間件發(fā)送給引擎。
(6)引擎從下載器中接收到Response并通過Spider中間件發(fā)送給Spider處理。
(7)Spider處理Response并返回爬取到的Item及新的Request給引擎。
(8)引擎將爬取到的Item給Item Pipeline,將Request給調(diào)度器。
(9)從第(2)步開始重復(fù),直到調(diào)度器中沒有更多的Request。
為了幫助大家更好地理解Scrapy的一次完整運行流程,下面把Scrapy的運作流程用擬人小劇場的方式進行表現(xiàn),如下所示:
(1)引擎: Hi! Spider,你要處理哪一個網(wǎng)站?
(2)Spider:老大要我處理xxx.om。
(3)引擎:你把第一個需要處理的URL給我吧。
(4)Spider: 給你,第一個URL是xxxxx.om。
(5)引擎: Hi!調(diào)度器,我這有Request請求,你幫我排序入隊一下。
(6)調(diào)度器:好的,正在處理,你等一下。
(7)引擎: Hi!調(diào)度器,把你處理好的Request請求給我。
(8)調(diào)度器:給你,這是我處理好的Requesto
(9)引擎: Hi!下載器,你按照老大的下載中間件的設(shè)置幫我下載一下這個Request請求。
(10)下載器:好的!給你,這是下載好的東西。(如果失敗: Sorry,這個Request下載失敗了。然后引擎告訴調(diào)度器,這個Request 下載失敗了,你記錄一下,我們待會兒再下載)。
(11)引擎: Hi! Spider, 這是下載好的東西,并且已經(jīng)按照老大的下載中間件處理過了,你自己處理一下(注意!這兒Responses默認是交給def parse(這個函數(shù)處理的)。
(12) Spider:(處理完畢數(shù)據(jù)之后對于需要跟進的URL),Hi!引擎,我這里有兩個結(jié)果,這個是我需要跟進的URL,還有這個是我獲取到的Item數(shù)據(jù)。
(13) 引擎: Hi!管道,我這兒有個item你幫我處理一下!調(diào)度器!這是需要跟進的URL你幫我處理下。
(14)管道,調(diào)度器:好的,現(xiàn)在就做!
然后,從第(4)步開始循環(huán),直到獲取完老大需要的全部信息。
猜你喜歡: