首頁  >  文章  >  後端開發  >  Python抓取框架 Scrapy的架構

Python抓取框架 Scrapy的架構

高洛峰
高洛峰原創
2017-02-25 13:32:531249瀏覽

最近在學Python,同時也在學習如何使用python抓取數據,於是就被我發現了這個非常受歡迎的Python抓取框架Scrapy,下面一起學習下Scrapy的架構,便於更好的使用這個工具。

一、概述​​

下圖顯示了Scrapy的大體架構,其中包含了它的主要元件及系統的資料處理流程(綠色箭頭所示)。下面就來一個個解釋每個組件的作用及資料的處理過程。

Python抓取框架 Scrapy的架构

二、組件

#1、Scrapy Engine(Scrapy引擎)

Scrapy引擎是用來控制整個系統的資料處理流程,並進行事務處理的觸發。更多的詳細內容可以看下面的資料處理流程。 2、Scheduler(排程)

調度程式從Scrapy引擎接受請求並排序列入佇列,並在Scrapy引擎發出請求後返還給他們。



3、Downloader(下載器)

#下載器的主要職責是抓取網頁並將網頁內容回饋給蜘蛛( Spiders) 。 4、Spiders(蜘蛛)

#蜘蛛是有Scrapy用戶自己定義用來解析網頁並抓取制定URL返回的內容的類,每個蜘蛛都能處理一個域名或一組域名。換句話說就是用來定義特定網站的抓取和解析規則。

蜘蛛的整個抓取流程(週期)是這樣的:

1).首先取得第一個URL的初始請求,當請求返回後調取一個回調函數。第一個請求是透過呼叫start_requests()方法。該方法預設從start_urls中的Url中產生請求,並執行解析來呼叫回調函數。
2).在回呼函數中,你可以解析網頁回應並傳回項目物件和請求物件或兩者的迭代。這些請求也將包含一個回調,然後被Scrapy下載,然後有指定的回調處理。
3).在回呼函數中,你解析網站的內容,同程使用的是Xpath選擇器(但是你也可以使用BeautifuSoup, lxml或其他任何你喜歡的程式),並產生解析的資料項。

4)。最後,從蜘蛛返回的項目通常會進駐到項目管道。

5、Item Pipeline(專案管道)

#專案管道的主要責任是負責處理有蜘蛛從網頁中抽取的項目,他的主要任務是清晰、驗證和儲存資料。當頁面被蜘蛛解析後,將被傳送到專案管道,並經過幾個特定的順序處理資料。每個專案管道的組件都是有一個簡單的方法組成的Python類別。他們獲取了專案並執行他們的方法,同時他們還需要確定的是是否需要在專案管道中繼續下一步或直接丟棄掉不處理。 專案管道通常執行的過程有:1).清洗HTML資料

2).驗證解析到的資料(檢查專案是否包含必要的欄位)

3 ).檢查是否重複資料(如果重複就刪除)

4).將解析到的資料儲存到資料庫

6、Downloader middlewares(下載器中介軟體)

下載中間件是位於Scrapy引擎和下載器之間的鉤子框架,主要是處理Scrapy引擎與下載器之間的請求及回應。它提供了一個自訂的程式碼的方式來拓展Scrapy的功能。下載中間器是一個處理請求和回應的鉤子框架。他是輕量級的,對Scrapy盡享全局控制的底層的系統。

7、Spider middlewares(蜘蛛中間件)

##########蜘蛛中間件是介於Scrapy引擎和蜘蛛之間的鉤子框架,主要工作是處理蜘蛛的回應輸入和請求輸出。它提供一個自訂程式碼的方式來拓展Scrapy的功能。蛛中間件是一個掛接到Scrapy的蜘蛛處理機制的框架,你可以插入自訂的程式碼來處理發送給蜘蛛的請求和返回蜘蛛獲取的回應內容和項目。 ############8、Scheduler middlewares(調度中間件)############調度中間件是介於Scrapy引擎和調度之間的中間件,主要工作是處從Scrapy引擎發送到調度的請求和回應。他提供了一個自訂的程式碼來拓展Scrapy的功能。 #########三、資料處理流程#########Scrapy的整個資料處理流程有Scrapy引擎進行控制,主要的運作方式為:###

引擎打開一個域名,時蜘蛛處理這個域名,並讓蜘蛛取得第一個爬取的URL。
引擎從蜘蛛那取得第一個需要爬取的URL,然後作為請求在調度中進行調度。
引擎從調度那取得接下來進行爬取的頁面。
調度將下一個爬取的URL回傳給引擎,引擎將他們透過下載中間件傳送到下載器。
當網頁被下載器下載完成後,回應內容透過下載中間件被傳送到引擎。
引擎收到下載器的回應並將它透過蜘蛛中間件發送到蜘蛛進行處理。
蜘蛛處理回應並返回爬取到的項目,然後給引擎發送新的請求。
引擎將抓取到的專案專案管道,並向調度發送請求。
系統重複第二部後面的操作,直到調度中沒有請求,然後斷開引擎與網域之間的聯繫。

四、驅動器

Scrapy是由Twisted寫的一個受歡迎的Python事件驅動網路框架,它使用的是非堵塞的非同步處理。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支PHP中文網。

更多Python抓取框架 Scrapy的架構相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn