Scrapy框架流程圖詳解

(一)、Scrapy框架介紹:

我們寫一個爬蟲,需要做很多事情,比如:發送網絡請求、數據解析、數據存儲、反爬蟲、反反爬蟲(更換ip代理、設置請求頭等)、異步請求等。這些事情在我們每一次寫爬蟲代碼的時候都要自己從零開始寫的話,比較浪費時間。因此 Scrapy 把一些基礎的東西封裝好了,在它上面寫爬蟲可以變的更加高效。

(二)、Scrapy架構圖及各個組件:

流程圖(1):

在這裏插入圖片描述
流程圖(2):在這裏插入圖片描述
Scrapy框架主要由六大組件組成,它們分別是調試器(Scheduler)、下載器(Downloader)、爬蟲(Spider)、中間件(Middleware)、實體管道(Item Pipeline)和Scrapy引擎(Scrapy Engine)。

2.1 Scrapy Engine(引擎):Scrapy引擎是整個框架的核心。它用來控制調試器、下載器、爬蟲。它就相當於計算機中的CPU,控制着整個流程。
2.2 Spider(爬蟲):發送需要爬取的鏈接給引擎,最後引擎再把其他模塊中請求回來的數據再發送給爬蟲,爬蟲就會去解析想要的數據。爬取鏈接以及解析頁面中的數據都是由自己來寫的。
2.3 Scheduler(調度器):它負責引擎發過來的請求,按照一定的方式進行排序和整理,負責調度請求的順序等。
2.4 Downloader(下載器):它負責引擎發過來的下載請求,然後去網絡上下載對應的數據後,再把這個數據交還給引擎。
2.5 Item Pipeline(實體管道):負責將Spider(爬蟲)傳遞過來的數據進行保存。具體保存在哪裏應該看我們自己的需要。
2.6 Middleware(中間件):負責對Request對象和Response對象進行處理(見流程圖一)

中間件又分爲兩部分:

1.Downloader Middlewares(下載中間件):它是拓展下載器和引擎之間的通信功能的中間件。比如說,在下載器執行之前可以在中間件進行一些操作:設置一些代理ip、設置一些請求頭等。
2.Spider Middlewares(爬蟲中間件):它是拓展爬蟲和引擎之間的通信功能的中間件。同樣的它也可以做一些操作。

(三)、Scrapy流程

1: 首先 先從Spider發送一個請求,初始化了一個Resquest對象,並且設置了回調函數(也就是創建Scrapy項目後的def parse(self, response)),把請求傳給引擎。
2: 引擎收到請求後,並不會把請求馬上發送出去,而是傳給了調度器。調度器接受到引擎發過來的Requser請求後,把Request對象按照一定的排序算法存儲到它裏面的一個隊列當中。
3: 接下來引擎會不斷的從調度器當中取出已經處理好的Request
4: 當引擎拿到Request後,再把這個請求扔給下載器。
5: 下載器拿到請求後,按照下載中間件中的設置去互聯網上面下載request請求。下載好數據後再把數據傳送給引擎。
6: 引擎拿到數據之後,再把這個數據(也就是response)通過爬蟲中間件返回給Spider。並把response作爲參數傳遞給第一步設置好的回調函數。
7: 爬蟲拿到數據之後(這個爬蟲是由我們自己寫),經過分析,把不需要的數據剔除掉,把需要的數據提取出來(使用xpath、BeautifulSoup、正則)。接下來再把提取出來的數據扔給引擎。
8: 引擎拿到數據之後,把這個數據扔給實體管道(如果這時還有其他的Requset,會重複3-8這個過程,直到獲取完所有的自己想要的信息)。管道中的代碼也是由我們自己來寫,該怎麼存儲,存儲到哪裏去等。

以上步驟做完後,就實現了爬蟲。

下面是從其他博主那裏看到的一個算是小故事吧,覺得很形象的把整個流程給描述了出來。

1.引擎:Hi!Spider, 你要處理哪一個網站?

2.Spider:老大要我處理xxxx.com。

3.引擎:你把第一個需要處理的URL給我吧。

4.Spider:給你,第一個URL是xxxxxxx.com。

5.引擎:Hi!調度器,我這有request請求你幫我排序入隊一下。

6.調度器:好的,正在處理你等一下。

7.引擎:Hi!調度器,把你處理好的request請求給我。

8.調度器:給你,這是我處理好的request

9.引擎:Hi!下載器,你按照老大的下載中間件的設置幫我下載一下這個request請求

10.下載器:好的!給你,這是下載好的東西。(如果失敗:sorry,這個request下載失敗了。然後引擎告訴調度器,這個request下載失敗了,你記錄一下,我們待會兒再下載)

11.引擎:Hi!Spider,這是下載好的東西,並且已經按照老大的下載中間件處理過了,你自己處理一下(注意!這兒responses默認是交給def
parse()這個函數處理的)

12.Spider:(處理完畢數據之後對於需要跟進的URL),Hi!引擎,我這裏有兩個結果,這個是我需要跟進的URL,還有這個是我獲取到的Item數據。

13.引擎:Hi !管道 我這兒有個item你幫我處理一下!調度器!這是需要跟進URL你幫我處理下。然後從第四步開始循環,直到獲取完老大需要全部信息。
14.管道“調度器:好的,現在就做!

自己剛學Scrapy不久,便乘熱打鐵鞏固一下並加上自己的一些理解,有不足之處請各位大佬幫忙斧正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章