Scrapy爬蟲框架詳解

scrapy

scrapy 是什麼

scrapy是框架 類似於車子

  • 採用異步框架 實現高效率的網絡採集

  • 最強大的框架 沒有之一

scrapy 框架結構

在這裏插入圖片描述

Engine

  • 控制有所模塊之間的數據交流
  • 根據條件觸發事件

Spider

  • 解析Downloader返回的響應 (Response)

  • 產生爬取項 (scraped item)

  • 產生額外的爬取請求 (Request)

    需要用戶編寫配置代碼

Spider Middleware

  • 目的: 對請求和爬取項的再處理
  • 功能: 修改、丟棄、新增請求或爬取項
    需要用戶編寫配置代碼

Scheduler

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

Item Pipelines

  • 以流水線方式處理Spider產生的爬取項。

  • 由一組操作順序組成,類似流水線,每個操作是一個 ItemPipeline 類型

  • 可能操作包括: 清理、檢驗和查重爬取項中的HTML數據、將數據存儲到數據庫

    需要用戶編寫配置代碼

Downloader

  • 根據請求下載網頁

Downloader Middleware

  • 目的:實施Engine、Scheduler和Downloader之間進行用戶可配置的控制
  • 功能: 修改、丟棄、新增請求或響應

scrapy 安裝

  • pip install scrapy → 報:VC++14.0 Twisted

      - 解決方案:離線安裝 pip install xxx.whl
    
  • scrapy bench 運行的時候 → 報:win32

    • 解決方案:pip install pywin32

創建 scrapy 項目

  • 使用命令行 cd 到 要創建 scrapy 項目的文件夾下

  • 運行命令:scrapy startproject xxx(項目名稱)

創建爬蟲文件

  • 使用命令行 cd 到scrapy 項目的根文件夾下

  • 運行命令:scrapy genspider Reptile_name(爬蟲名稱) domain_name(域名)

    注意

    • 爬蟲名字不得與項目名稱一樣

    • 網站域名是允許爬蟲採集的域名(限制爬蟲數據採集範圍)

爬蟲文件

import scrapy  # 導入scrapy

創建 爬蟲類 並且繼承自scrapy.Spider --> 最基礎的類 scrapy共有5個爬蟲類

	class XicidailiSpider(scrapy.Spider):
	    name = 'xicidaili'  # 爬蟲名字 必須唯一
	    allowed_domains = ['www.xicidaili.com']  # 允許的域名(可以不要)
	    start_urls = ['http://www.xicidaili.com/']  # 開始採集的網站
        
    	# 解析響應數據 提取數據 或網址等    response響應數據
    	def parse(self, response):
        	pass

分析網站:

  • 提取數據

    • 正則表達式(基礎 必會 難掌握)

    • xpath表達式 → 從HTML中提取數據(scrapy默認提取數據方式)

  • CSS表達式 → 從HTML中提取數據(不建議使用 scrapy中的CCS表達式是轉成xpath表達式使用的)

    • response.xpath(’’).get() get() → 得到一個元素 getall → 得到多個元素
  • 運行爬蟲

  • scrapy crawl xxx(爬蟲名稱)

yield scrapy.Request(next_url, callback=self.parse)  #生成器
	
# Request()發出請求 類似於requests.get()
# callback 是將發出去的請求得到的響應數據還交給自己處理
	
# 注意:回調函數 不寫()  只寫 函數名

  • 執行程序並保存數據

    • scrapy crawl xxx(爬蟲名稱) -o xxx.json/.csv/.xml

scrapy 常用命令

命令 說明 格式
startproject 創建一個新工程 scrapy startproject xxx_Spider(項目名稱)
genspider 創建一個爬蟲 scrapy genspider Reptile_name(爬蟲名稱) domain_name(域名)
settings 獲得爬蟲配置信息 scrapy genspider [options]
crawl 運行一個爬蟲 scrapy crawl xxx(爬蟲名稱)
list 列出工程中所有爬蟲 scrapy list
shell 啓動URL調試命令行 scrapy shell [url]

requests 庫 VS scrapy 框架

相同點

  • 兩者都可以進行頁面請求和爬取,Python爬蟲的兩個重要技術路線

  • 兩者可用性都好,文檔豐富,入門簡單

  • 兩者都沒有處理js、提交表單、應對驗證碼等功能(可擴展)

不同點

requests scrapy
頁面級爬蟲 網站級
功能庫 框架
併發考慮不足,性能較差 併發性好,性能較高
重點在於頁面下載 重點在於爬蟲結構
定製靈活 一般定製靈活,深度定製困難
上手十分簡單 入門稍難

技術路線的選擇

  • 非常小的需求,requests庫
  • 不太小的需求,scrapy框架
  • 定製程度很高的需求(不考慮規模),自搭建框架,requests > scrapy
    較差|併發性好,性能較高
    重點在於頁面下載|重點在於爬蟲結構
    定製靈活|一般定製靈活,深度定製困難
    上手十分簡單|入門稍難

技術路線的選擇

  • 非常小的需求,requests庫
  • 不太小的需求,scrapy框架
  • 定製程度很高的需求(不考慮規模),自搭建框架,requests > scrapy
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章