Python爬蟲學習 9 —— scrapy爬蟲框架

  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 🍻🍻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章