![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SOwYWNwATNlhTNhVTYzEjZ3YmYlRGZzUGMhFWYzkTMz8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
前言
Scrapy是一個非常優秀的架構,操作簡單,拓展友善,是比較流行的爬蟲解決方案。
Scrapy是一個用Python寫的Crawer Framework,簡單輕巧而且非常友善。Scrapy使用Twisted這個異步網絡庫來處理網絡通信,架構清晰,并且包含了各種中間件接口,可以靈活的完成各種需求。
Scrayp架構的優勢
1. 容易建構大規模抓取項目
2. 異步處理請求的速度快
3. 使用自動調節機制自動調整爬取速度
Scrapy架構的架構
我們知道Scrapy架構是一個快速的,高層次的基于Python的爬蟲架構,抓取web站點并從頁面提取結構化資料,我們隻需要定制幾個子產品就可以輕松實作一個爬蟲。那麼Scrapy架構究竟長的什麼樣子?來看下面這幅圖,這幅圖大家看懂了,其實Scrapy架構就等于學會了一半了
有同學可能會問這幅圖是什麼意思呢?咱們分别來解釋一下
Scrapy引擎(Engine)。引擎負責控制資料流在系統的所有元件中流動,并在相應動作發生時觸發事件。其實就相當于汽車的發動機一樣
排程器(Scheduler)。排程器從引擎接收request并将它們入隊,以便引擎請求request時提供給引擎
下載下傳器(Downloader)。下載下傳器負責擷取頁面資料并提供給引擎,而後提供給Spider。
Spider。Spider是Scrapy使用者編寫用于分析response并提取Item或額外跟進的URL的類。每個Spider負責處理一些特定的網站
ItemPipeline。ItemPipeline負責處理被Spider提取出來的Item。例如存儲到資料庫中
下載下傳中間件(Downloader middlewares)。下載下傳中間件是在引擎和下載下傳器之間,處理Downloader傳遞給引擎的response。同時還可以插入自定義代碼來擴充Scrapy功能
Spider中間件(Spider middlewares)。Spider中間件是在引擎和Spider中間件之間,處理Spider的輸入(response)和輸出(Items及response)。同時還可以插入自定義代碼來擴充Scrapy功能
看完這些相信很多同學不是特别明白,那麼Scrapy究竟是如何工作的呢?
首先,引擎打開一個網站,找到處理該網站的Spider并向該Spider請求第一個要爬取的URL。引擎從Spider中擷取到第一個要爬取的URL并通過排程器(Scheduler)以requests進行排程。引擎向排程器請求下一個要爬取的URL。
其次,調取器傳回一個要爬取的URL給引擎,引擎将URL通過下載下傳中間件轉發給下載下傳器(Downloader)。一旦也沒下載下傳完畢,下載下傳生成一個該頁面的response,并将其通過下載下傳中間件發送給引擎
最後,引擎從下載下傳器中接收到response并通過Spider中間件發送給Spider處理。Spider處理respone并傳回爬取到的Item,給ItemPipeline,将request給排程器。重複直到排程器中沒有更多的request,引擎關閉該網站
建立Scrapy項目
Scrapy項目
下面我們以爬取汽車之家作為案例,由于頁面結構非常清晰,這裡我們就不去講解了。讓大家感受下Scrapy架構非一般的速度。準備好了嗎?
效果展示
相信總有一款是你喜歡的愛車,那還等什麼,趕緊用Scrapy去試試吧