Scrapy框架
Scrapy is a fast high-level web crawling and web scraping framework, used to crawl websites and extract structured data from their pages. It can be used for a wide range of purposes, from data mining to monitoring and automated testing.
---------來自官方文檔的介紹
- Engine從Spider處獲得爬取請求(Request)
- Engine將爬取請求轉發給Scheduler,用於調度
- Engine從Scheduler處獲得下一個要爬取的請求
- Engine將爬取請求通過中間件發送給Downloader
- 爬取網頁後,Downloader形成響應(Response)通過中間件發給Engine
- Engine將收到的響應通過中間件發送給Spider處理
- Spider處理響應後產生爬取項(scraped Item)和新的爬取請求(Requests)給Engine
- Engine將爬取項發送給Item Pipeline(框架出口)
- Engine將爬取請求發送給Scheduler
Engine控制各模塊數據流,不間斷從Scheduler處獲得爬取請求,直至請求爲空。
數據流的出入口
框架入口:Spider的初始爬取請求
框架出口:Item Pipeline
用戶只需編寫(配置)Spider和Item Pipeline
Engine
- 控制所有模塊之間的數據流
- 根據條件觸發事件
不需要用戶修改
Downloader
根據請求下載網頁
不需要用戶修改
Scheduler
對所有爬取請求進行調度管理
不需要用戶修改
Downloader Middleware
目的:實施Engine、Scheduler和Downloader之間進行用戶可配置的控制
功能:修改、丟棄、新增請求或響應
用戶可以編寫配置代碼
Spider
- 解析Downloader返回的響應(Response)
- 產生爬取項(scraped item)
- 產生額外的爬取請求(Request)
需要用戶編寫配置代碼
Item Pipelines
- 以流水線方式處理Spider產生的爬取項
- 由一組操作順序組成,類似流水線,每個操作是一個Item Pipeline類型
- 可能操作包括:清理、檢驗和查重爬取項中的HTML數據、將數據存儲到數據庫
需要用戶編寫配置代碼
Spider Middleware
目的:對請求和爬取項的再處理
功能:修改、丟棄、新增請求或爬取項
用戶可以編寫配置代碼
requests 和 Scrapy的異同
相同點:
- 兩者都可以進行頁面請求和爬取,Python爬蟲的兩個重要技術路線
- 兩者可用性都好,文檔豐富,入門簡單
- 兩者都沒有處理js、提交表單、應對驗證碼等功能(可擴展)
不同點:
requests | Scrapy |
---|---|
頁面級爬蟲 | 網站級爬蟲 |
功能庫 | 框架 |
併發性考慮不足,性能較差 | 併發性好,性能較高 |
重點在於頁面下載 | 重點在於爬蟲結構 |
定製靈活 | 一般定製靈活,深度定製困難 |
上手十分簡單 | 入門稍難 |
Scrapy常用命令
命令 | 說明 | 格式 |
---|---|---|
startproject | 創建一個新工程 | scrapy startproject <name> [dir] |
genspider | 創建一個爬蟲 | scrapy genspider [options] <name> <domain> |
settings | 獲得爬蟲配置信息 | scrapy settings [options] |
crawl | 運行一個爬蟲 | scrapy crawl <spider> |
list | 列出工程中所有爬蟲 | scrapy list |
shell | 啓動URL調試命令行 | scrapy shell [url] |
生成的工程目錄
PS E:\scrapyDemo> tree /f
卷 軟件 的文件夾 PATH 列表
卷序列號爲 54DD-69A2
E:.
│ scrapy.cfg ------------------->>部署Scrapy爬蟲的配置文件
│
└─scrapyDemo ------------>>Scrapy框架的用戶自定義Python代碼
│ items.py -------------->>Items代碼模板(繼承類)
│ middlewares.py ------->>Middlewares代碼模板(繼承類)
│ pipelines.py --------->>Pipelines代碼模板(繼承類)
│ settings.py -------->>Scrapy爬蟲的配置文件
│ __init__.py --------->>初始化腳本
│
├─spiders -------------->>Spiders代碼模板目錄(繼承類)
│ │ firstSpider.py ------>>生成的爬蟲
│ │ __init__.py ------>>初始文件,無需修改
│ │
│ └─__pycache__ -------->>緩存目錄,無需修改
│ firstSpider.cpython-37.pyc
│ __init__.cpython-37.pyc
│
└─__pycache__ ----------->>緩存目錄,無需修改
settings.cpython-37.pyc
__init__.cpython-37.pyc
Scrapy爬蟲的使用步驟
步驟1:創建一個工程和Spider模板
步驟2:編寫Spider
步驟3:編寫Item Pipeline
步驟4:優化配置策略
Scrapy爬蟲的數據類型
-
Request類
Request對象表示一個HTTP請求,由Spider生成,由Downloader執行
-
Response類
Response對象表示一個HTTP響應,由Downloader生成,由Spider處理
-
Item類
Item對象表示一個從HTML頁面中提取的信息內容,由Spider生成,由Item Pipeline處理,Item類似字典類型,可以按照字典類型操作
Scrapy爬蟲支持多種HTML信息提取方法:
- Beautiful Soup
- lxml
- re
- XPath Selector
- CSS Selector