Python爬蟲速成------Scrapy框架

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.

                                                                                                        ---------來自官方文檔的介紹

Scrapy框架

  1. Engine從Spider處獲得爬取請求(Request)
  2. Engine將爬取請求轉發給Scheduler,用於調度
  3. Engine從Scheduler處獲得下一個要爬取的請求
  4. Engine將爬取請求通過中間件發送給Downloader
  5. 爬取網頁後,Downloader形成響應(Response)通過中間件發給Engine
  6. Engine將收到的響應通過中間件發送給Spider處理
  7. Spider處理響應後產生爬取項(scraped Item)和新的爬取請求(Requests)給Engine
  8. Engine將爬取項發送給Item Pipeline(框架出口)
  9. Engine將爬取請求發送給Scheduler

Engine控制各模塊數據流,不間斷從Scheduler處獲得爬取請求,直至請求爲空。

數據流的出入口

框架入口:Spider的初始爬取請求

框架出口:Item Pipeline

用戶只需編寫(配置)Spider和Item Pipeline

Engine

  1. 控制所有模塊之間的數據流
  2. 根據條件觸發事件

不需要用戶修改

Downloader

根據請求下載網頁

不需要用戶修改

Scheduler

對所有爬取請求進行調度管理

不需要用戶修改

Downloader Middleware

目的:實施Engine、Scheduler和Downloader之間進行用戶可配置的控制

功能:修改、丟棄、新增請求或響應

用戶可以編寫配置代碼

Spider

  1. 解析Downloader返回的響應(Response)
  2. 產生爬取項(scraped item)
  3. 產生額外的爬取請求(Request)

需要用戶編寫配置代碼

Item Pipelines

  1. 以流水線方式處理Spider產生的爬取項
  2. 由一組操作順序組成,類似流水線,每個操作是一個Item Pipeline類型
  3. 可能操作包括:清理、檢驗和查重爬取項中的HTML數據、將數據存儲到數據庫

需要用戶編寫配置代碼

Spider Middleware

目的:對請求和爬取項的再處理

功能:修改、丟棄、新增請求或爬取項

用戶可以編寫配置代碼

requests 和 Scrapy的異同

相同點:

  1. 兩者都可以進行頁面請求和爬取,Python爬蟲的兩個重要技術路線
  2. 兩者可用性都好,文檔豐富,入門簡單
  3. 兩者都沒有處理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爬蟲的數據類型

  1. Request類

    Request對象表示一個HTTP請求,由Spider生成,由Downloader執行

  2. Response類

    Response對象表示一個HTTP響應,由Downloader生成,由Spider處理

  3. Item類

    Item對象表示一個從HTML頁面中提取的信息內容,由Spider生成,由Item Pipeline處理,Item類似字典類型,可以按照字典類型操作

Scrapy爬蟲支持多種HTML信息提取方法:

  • Beautiful Soup
  • lxml
  • re
  • XPath Selector
  • CSS Selector

推薦課程《Python網絡爬蟲與信息提取 》

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