Scrapy(/ˈskreɪpi/) 是一個Python編寫的開源網絡爬蟲框架。它是一個被設計用於爬取網絡數據、提取結構性數據的程序框架。
使用Scrapy框架可以很方便地爬取網站。
一、Scrapy入門
- 使用pip安裝Scrapy。
- 使用
scrapy startproject xxx
新建一個Scrapy 項目。 - 創建一個Item類,繼承scrapy.Item,明確抓取的目標。
- 使用
scrapy genspider xxx "url"
新建一個spider. - 完善各個代碼文件內容,詳細見上方教程
- 使用
scrapy crawl xxx
開始爬取
文件目錄如下圖:
二、Scrapy架構圖
三、Scrapy核心組件
如架構圖中所示,Scrapy 總共有五個重要的組件和兩個中間件組件:
- Scrapy Engine(引擎): 負責各個組件之間的通訊,信號、數據傳遞等。
- Scheduler(調度器): 接收從引擎發送過來的Requests請求並整理暫存請求,當引擎需要時交還給引擎。
- Downloader(下載器): 負責下載Scrapy 引擎發送的所有Requests請求,並將其獲取到的Responses交還給Scrapy Engine(引擎),由引擎交給Spider來處理。
- Spider(爬蟲): 負責處理所有Responses,從中分析提取數據,獲取Item字段需要的數據,並提交Requests給引擎。
- Item Pipeline(管道): 負責處理Spider中獲取到的Item,並進行進行後期處理(詳細分析、過濾、存儲等)的地方。
中間件的功能如架構圖所示
- Downloader Middlewares(下載中間件): 自定義擴展下載功能的組件。
- Spider Middlewares(Spider中間件): 自定擴展和操作引擎和Spider中間通信的功能組件(比如進入Spider的Responses;和從Spider出去的Requests)
四、Scrapy 運行流程
Scrapy 數據流轉流程,結合架構圖。
- Spider 生成 Requests 發送到 Engine, 中間經過 SpiderMiddleware處理。
- Engine 將從 Spider 處獲得的 Requests 發送給 Schedule, 並向其獲取待下載請求(異步)。Schedule 將Requests 整理,按一定順序入隊。
- Schedule 將處理好的需要下載的請求發送給Engine。
- Engine 得到需下載的請求後,將其發送到Downloader,中間經過DownloadMiddleware, 例如代理中間件,UA中間件等。
- Downloader 將請求下載後,生成響應Responses, 送到Engine, 中間經過DownloadMiddleware。
- Engine 將Responses 返回到Spider進行處理。中間經過一系列SpiderMiddleware。
- Spider 提取Responses 中信息構造Item 和生成新的Requests, 送到Engine,中間經過一系列SpiderMiddleware。
- Engine 將Item 送到Item Pipelines進行處理,將Requests 送到Schedule進行處理。
- 循環往復,直至結束。