爬蟲顧名思義是爬取數據的工具,但由於爬取數據的多樣化和爬取流程的類似性造成了共識的爬蟲框架。數據庫
通常的爬蟲的總體結構以下所示框架
綠線是數據流向,首先從初始 URL 開始,Scheduler 會將其交給 Downloader 進行下載,下載以後會交給 Spider 進行分析,Spider 分析出來的結果有兩種:一種是須要進一步抓取的連接,例如以前分析的「下一頁」的連接,這些東西會被傳回 Scheduler ;另外一種是須要保存的數據,它們則被送到 Item Pipeline 那裏,那是對數據進行後期處理(詳細分析、過濾、存儲等)的地方。另外,在數據流動的通道里還能夠安裝各類中間件,進行必要的處理。ide
Scrapy引擎是用來控制整個系統的數據處理流程,並進行事務處理的觸發。更多的詳細內容能夠看下面的數據處理流程。函數
調度程序從Scrapy引擎接受請求並排序列入隊列,並在Scrapy引擎發出請求後返還給他們。工具
Downloader(下載器) 下載器的主要職責是抓取網頁並將網頁內容返還給蜘蛛( Spiders)。網站
Spiders(蜘蛛) 蜘蛛是有Scrapy用戶本身定義用來解析網頁並抓取制定URL返回的內容的類,每一個蜘蛛都能處理一個域名或一組域名。換句話說就是用來定義特定網站的抓取和解析規則。蜘蛛的整個抓取流程(週期)是這樣的:首先獲取第一個URL的初始請求,當請求返回後調取一個回調函數。第一個請求是經過調用start_requests()方法。該方法默認從start_urls中的Url中生成請求,並執行解析來調用回調函數。在回調函數中,你能夠解析網頁響應並返回項目對象和請求對象或二者的迭代。這些請求也將包含一個回調,而後被Scrapy下載,而後有指定的回調處理。在回調函數中,你解析網站的內容,使用的是Xpath選擇器(可是你也可使用BeautifuSoup, lxml或其餘任何你喜歡的程序),並生成解析的數據項。最後,從蜘蛛返回的項目一般會進駐到項目管道。url
Item Pipeline(項目管道) 項目管道的主要責任是負責處理有蜘蛛從網頁中抽取的項目,他的主要任務是清晰、驗證和存儲數據。當頁面被蜘蛛解析後,將被髮送到項目管道,並通過幾個特定的次序處理數據。每一個項目管道的組件都是有一個簡單的方法組成的Python類。他們獲取了項目並執行他們的方法,同時他們還須要肯定的是是否須要在項目管道中繼續執行下一步或是直接丟棄掉不處理。項目管道一般執行的過程有:清洗HTML數據驗證解析到的數據(檢查項目是否包含必要的字段)檢查是不是重複數據(若是重複就刪除)將解析到的數據存儲到數據庫中xml
Downloader middlewares(下載器中間件)中間件
下載中間件是位於Scrapy引擎和下載器之間的鉤子框架,主要是處理Scrapy引擎與下載器之間的請求及響應。它提供了一個自定義的代碼的方式來拓展Scrapy的功能。下載中間器是一個處理請求和響應的鉤子框架。他是輕量級的,對Scrapy盡享全局控制的底層的系統。對象
Spider middlewares(蜘蛛中間件)蜘蛛中間件是介於Scrapy引擎和蜘蛛之間的鉤子框架,主要工做是處理蜘蛛的響應輸入和請求輸出。它提供一個自定義代碼的方式來拓展Scrapy的功能。蛛中間件是一個掛接到Scrapy的蜘蛛處理機制的框架,你能夠插入自定義的代碼來處理髮送給蜘蛛的請求和返回蜘蛛獲取的響應內容和項目。
Scheduler middlewares(調度中間件) 調度中間件是介於Scrapy引擎和調度之間的中間件,主要工做是處從Scrapy引擎發送到調度的請求和響應。他提供了一個自定義的代碼來拓展Scrapy的功能。
Scrapy的整個數據處理流程有Scrapy引擎進行控制,其主要的運行方式爲: