Scrapy是一個爲了爬取網站數據,提取結構性數據而編寫的應用框架。 能夠應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。 其最初是爲了 頁面抓取 (更確切來講, 網絡抓取 )所設計的, 也能夠應用在獲取API所返回的數據(例如 Amazon Associates Web Services ) 或者通用的網絡爬蟲。這裏貼出Scrapy框架官方中文文檔的連接。html
接下來的圖展示了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,引擎關閉該網站。架構