1. 程式人生 > >scrapy入門教程(三)scrapy相關元件

scrapy入門教程(三)scrapy相關元件

前面兩步的準備工作完成之後,我們先不要著急開始工作,畢竟作為一個框架,還是很複雜的;貿然上手 開整,很容易陷入懵逼狀態啊!一團漿糊,理不清思路,後面的事情做起來很很麻煩啦!

我們來看看下面這張圖:

(1)引擎(Engine) 引擎負責控制資料流在系統所有元件中流動,並在相應動作發生時觸發事件。你可以理解為我們人的身體。 (2)排程器(Scheduler) 排程器從引擎接受request並將他們入隊,以便之後引擎請求他們時提供給引擎。 (3)下載器(Downloader) 下載器負責獲取頁面資料並提供給引擎,而後提供給spider。 (4)爬蟲(Spider) Spider是Scrapy使用者編寫用於分析response並提取item(即獲取到的item)或額外跟進的URL的類。 (5)Item Pipelines Item Pipelines負責處理被spider提取出來的item。比如去重,持久化儲存(存資料庫,寫入檔案,總之就是儲存資料用的)。 (6)下載器中介軟體(Downloader middlewares) 下載器中介軟體是在引擎及下載器之間的特定鉤子(specific hook),處理Downloader傳遞給引擎的response。你可以當作是一個可以自定義擴充套件下載功能的元件。 (7)Spider中介軟體(Spider middlewares) Spider中介軟體是在引擎及Spider之間的特定鉤子(specific hook),處理spider的輸入(response)和輸出(items及requests)。你可以理解為是一個可以自定擴充套件和操作引擎和Spiders中間‘通訊‘的功能元件(比如進入Spiders的Responses;和從Spiders出去的Requests)。

scrapy整個資料流程

1、引擎開啟一個網站,找到處理該網站的spider,並向spider請求第一個要爬取的url。 2、引擎從spider獲取到url後將其傳遞給排程器進行排程。 3、排程器向引擎返回下一個要爬取的url。 4、引擎獲得url後,通過下載器中介軟體向下載器傳送request請求。 5、一旦頁面下載完成,下載器通過下載器中介軟體返回一個該頁面的response物件給引擎。 6、引擎收到response物件後通過spider中介軟體將其傳遞給spider進行處理。 7、spider對接收到的response物件進行處理,並通過spider中介軟體返回給引擎item和新的request請求。 8、引擎將接收到的item交給item pipeline進行處理,將request傳遞給排程器進行排程。 9、重複以上步驟,直到排程器中沒有request請求(對於下載失敗的url,Scrapy會重新進行請求),引擎關閉該網站。

是不是太過官方化,晦澀難懂。沒關係,我們用大白話來講解一下。

在這裡插入圖片描述

程式在執行的時候。scrapy的整個資料流向是這樣的:

引擎:hi,spider,你要處理哪個網站?ヾ(✿゚▽゚)ノ spider:唔…我要處理ooxx.com(❁´ω`❁) 引擎:(๑‾ ꇴ ‾๑)好噠,你把你第一個需要的處理的url告訴我吧,麼麼噠(づ ̄ 3 ̄)づ。 Spiders:嗯吶…給你第一個url,它是ooxxox.com✧(≖ ◡ ≖✿ 引擎:收到٩( ‘ω’ )و get! 引擎:hello!排程器哥哥,我這有個request你幫人家排序入隊一下啦(/ω\)…害羞(✿◡‿◡)。 排程器:好的,正在處理,你等一下。 引擎:謝謝排程器哥哥(╹▽╹

),等你處理好了,記得把你處理好的request傳給人家哦(✺ω✺)。 排程器:沒問題(大手一揮),給你,這是我處理好的request,拿去吧。 引擎:下載器,你好呀(*´▽`)ノノ,能按照下載器中介軟體的設定幫我處理這個request嗎Ծ‸Ծ拜託啦! 下載器:當然可以啦…!給你,這是下載好的東西(´▽`)ノノ(如果失敗,下載器告訴引擎:不好意思啦親,這個request下載失敗了(弱小委屈可憐無助…(。﹏。)對不起),然後引擎告訴排程器,排程器哥哥,這個request下載失敗了,你記錄一下啦,我們一會兒再下載。乖乖( ,´•ω•)ノ"(´っω•`。)) 引擎:Spider,你好呀,又見面了,這是下載好的東西,並且已經按照Spider中介軟體處理過了,你再處理一下。期待中…*❦ω❦(注意!這兒responses預設是交給def parse這個函式處理的) Spiders:吶,引擎,這是我需要跟進的url,還有這是我獲取到的Item٩(๑>◡<๑)۶ 引擎:❥(ゝω・✿ฺ)Item Pipeline,在嗎?我這兒有個item你幫人家處理一下啦…(づ ̄3 ̄)づ╭❤~ 引擎:排程器哥哥!這是我需要的url你幫人家處理下嘛,好不好…✺◟(∗❛ัᴗ❛ั∗)◞✺。 然後一直迴圈,直到排程器哥哥不再被你萌化,再給你request了,整個程式才會停止,(也就是說,對於下載失敗的url,會重新排程哦。)

以上就是Scrapy整個流程了,大家將就著看看。 在這裡插入圖片描述