Scrapy是一個爲了爬取網站數據,提取結構性數據而編寫的應用框架。 其能夠應用在數據挖掘,信息處理或存儲歷史數據等一系列的程序中。
其最初是爲了頁面抓取 (更確切來講, 網絡抓取 )所設計的, 也能夠應用在獲取API所返回的數據(例如 Amazon Associates Web Services ) 或者通用的網絡爬蟲。Scrapy用途普遍,能夠用於數據挖掘、監測和自動化測試。網絡
requests本質就是就是發送http請求,若是在requests基礎上作個封裝,我去某個網站或者某個域名一直去發送請求找到全部的url,下載東西的請求在寫個方法源源不斷的下載東西!這樣咱們就寫了個框架。架構
Scrapy 使用了 Twisted異步網絡庫來處理網絡通信。總體架構大體以下:框架
Scrapy主要包括瞭如下組件:dom
一、引擎(Scrapy)
用來處理整個系統的數據流處理, 觸發事務(框架核心)異步
二、調度器(Scheduler)
用來接受引擎發過來的請求, 壓入隊列中, 並在引擎再次請求的時候返回. 能夠想像成一個URL(抓取網頁的網址或者說是連接)的優先隊列, 由它來決定下一個要抓取的網址是什麼, 同時去除重複的網址ide
三、下載器(Downloader)
用於下載網頁內容, 並將網頁內容返回給蜘蛛(Scrapy下載器是創建在twisted這個高效的異步模型上的)測試
四、爬蟲(Spiders)
爬蟲是主要幹活的, 用於從特定的網頁中提取本身須要的信息, 即所謂的實體(Item)。用戶也能夠從中提取出連接,讓Scrapy繼續抓取下一個頁面網站
五、項目管道(Pipeline)
負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化實體、驗證明體的有效性、清除不須要的信息。當頁面被爬蟲解析後,將被髮送到項目管道,並通過幾個特定的次序處理數據。url
六、下載器中間件(Downloader Middlewares)
位於Scrapy引擎和下載器之間的框架,主要是處理Scrapy引擎與下載器之間的請求及響應。spa
七、爬蟲中間件(Spider Middlewares)
介於Scrapy引擎和爬蟲之間的框架,主要工做是處理蜘蛛的響應輸入和請求輸出。
八、調度中間件(Scheduler Middewares)
介於Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。
Scrapy中的數據流由執行引擎控制,其過程以下:
1)引擎打開一個網站(open a domain),找處處理該網站的Spider並向該spider請求第一個要爬取的URL(s)。
2)引擎從Spider中獲取到第一個要爬取的URL並在調度器(Scheduler)以Request調度。
3)引擎向調度器請求下一個要爬取的URL。
4)調度器返回下一個要爬取的URL給引擎,引擎將URL經過下載中間件(請求(request)方向)轉發給下載器(Downloader)。
5)一旦頁面下載完畢,下載器生成一個該頁面的Response,並將其經過下載中間件(返回(response)方向)發送給引擎。
6)引擎從下載器中接收到Response並經過Spider中間件(輸入方向)發送給Spider處理。
7)Spider處理Response並返回爬取到的Item及(跟進的)新的Request給引擎。
8)引擎將(Spider返回的)爬取到的Item給Item Pipeline,將(Spider返回的)Request給調度器。
9)(從第二步)重複直到調度器中沒有更多地request,引擎關閉該網站。