Scray是一個功能強大且非常快速的爬蟲框架,具體學習它的基本使用。
一、scrapy介紹
scrapy:它是一個爬蟲框架結構,它包含了五個模塊和兩條之間線路:
主要模塊:
模塊 | 描述 |
---|---|
SPIDERS | 發送請求,處理響應,需要用戶自己編寫(配置) |
ENGINE | 接受request請求並大宋到SCHEDULER模塊 |
SCHEDULER | 調度請求,向ENGINE發送真實的請求 |
DOWNLOADER | 連接互聯網,爬取相關網頁,生成response對象 |
ITEM PIPELINES | 手機爬取得到的內容,需要用戶自己編寫(配置) |
二、框架模塊介紹
Engine模塊
- 控制所有模塊之間的數據流
- 根據條件觸發事件
- 不需要用戶修改
Downloader模塊
- 根據請求下載網頁
- 不需要用戶修改
Scheduler模塊
- 對於所有爬取請求進行管理調度
- 不需要用戶修改
Spider模塊
- 解析Downloader返回的response響應
- 產生爬取項(scpaped item)
- 產生額外的爬取請求(request)
Downloader Middleware模塊
- 一流水線的方式處理Spider產生的爬取項
- 由一組操作順序組成,類似流水線,每一個操作是一個Item Pipeline類型
- 可能的操作包括:清理、檢驗和查重爬取項中的HTML數據、將數據存儲到數據庫
Downloader Middleware模塊
目的:實現Engine、scheduler和downloader之間進行用戶可配置的控制
功能:修改、丟棄、新增請求或響應
Spider Middleware模塊
目的:對請求和爬取項的再處理
功能:修改、丟棄、新增請求或爬取項
三、requests 和 scrapy
對比差異:
requests | scrapy |
---|---|
頁面級爬蟲 | 網站級爬蟲 |
功能庫 | 框架 |
併發性考慮不足 | 併發性好,性能較高 |
重點在於頁面下載 | 字典在於爬蟲框架 |
定製靈活 | 深度定製困難 |
上手十分簡單 | 入門稍難 |
如何選擇:
requests:只需要下載某個頁面的局部內容時選擇request構建小型爬蟲
scrapy :當需要批量下載網站各個頁面時,考慮使用scrapy
四、scrapy命令行
scrapy是爲了持續運行設計的專業爬蟲框架,提供操作的scrapy命令行
命令行格式:
> scrapy <command> [options] [args]
scrapy命令:
命令 | 說明 | 格式 |
---|---|---|
startproject | 創建一個新工程 | scrapy startproject <name> [dir] |
genspider | 創建一個爬蟲 | scrapy genspider [options] <name> <domain> |
crawl | 運行一個爬蟲 | scrapy crawl <spider> |
settings | 獲取爬蟲配置信息 | scrapy settings [options] |
list | 列出工程中所有爬蟲 | scrapy list |
shell | 啓動該URL調試命令 | scrapy shell [url] |
scrapy命令行邏輯:
爲什麼scrapy採用命令行創建和運行爬蟲?
- 命令行更容易自動化,適合腳本控制
- 本質上,scrapy是給程序員用的,功能(比界面)更重要
五、scrapy爬蟲基本使用
scrapy使用步驟:
step1:創建一個工程和Spider模板
step2:編寫Spider
step3:編寫Item Pipeline
step4:優化配置策略
Scrapy爬蟲的數據類型:
Request類:
class scrapy.http.Request()
- Request對象表示一個HTTP請求
- 由Spider生成,由Downloader執行
屬性/方法 | 描述 |
---|---|
.url | Request對應的請求URL地址 |
.method | 對應的請求方法,’ GET’ ‘POST’ 等 |
.headers | 字典類型風格的請求頭 |
.body | 請求內容主題,字符串類型 |
.meta | 用戶添加的擴展信息,在Scrapy內部模塊鍵傳遞信息使用 |
.copy() | 複製該請求 |
Response類:
class scrapy.http.Response()
- Response對象表示一個HTTP響應
- 有Downloader生成,由Spider處理
屬性/方法 | 描述 |
---|---|
.url | Request對應的請求URL地址 |
.status | HTTP狀態名,默認值爲200 |
.headers | Response對應的頭部信息 |
.body | Response對應的內容信息,字符串類型 |
.flags | 一組標記 |
.request | 產生Request類型對應的Request對象 |
.copy() | 複製該響應 |
Item類:
class scrapy.item.Item()
- Item對象表示一個從HTML頁面中提取的信息內容
- 由Spider生成,由Item Pipeline處理
- Item類似字典類型,可以按照字典類型操作
第九篇python爬蟲學習筆記完結啦 cheers 🍻🍻