爬虫三大解析库:lxml, jsonpath, bs4

这一章的核心就是"如何从获取到的数据中提取我们想要的信息"。这一章介绍了三种主流的解析工具:xpath、jsonpath 和 BeautifulSoup。

🪓 第一部分:XPath 解析

XPath 是一种在 XML 和 HTML 文档中查找信息的语言,功能强大且语法灵活。

1. 环境准备
  • 浏览器插件:在 Chrome 浏览器中安装 XPath Helper 插件,方便在开发者工具中调试 XPath 路径。

  • Python 库 :安装 lxml 库。

    复制代码
    pip install lxml -i https://pypi.douban.com/simple
2. 核心用法
  1. 导入库 :from lxml import etree
  2. 创建解析对象 :
    • 解析本地文件 :html_tree = etree.parse('XX.html')
    • 解析服务器响应 :html_tree = etree.HTML(response.read().decode('utf-8'))
  3. 执行解析 :html_tree.xpath('xpath路径')
3. XPath 基本语法
语法 说明 示例
// 查找所有子孙节点,不考虑层级 //div
/ 查找直接子节点 /div/p
[@属性] 谓词查询,根据属性筛选 //div[@id]
[@属性="值"] 精确匹配属性值 //div[@id="main"]
//@属性 查询所有节点的指定属性 //@class
/text() 获取标签内的文本内容 //div/h1/text()
contains() 模糊查询,属性值包含某字符串 //div[contains(@id, "he")]
starts-with() 模糊查询,属性值以某字符串开头 //div[starts-with(@id, "he")]
and 逻辑运算,同时满足多个条件 //div[@id="head" and @class="s_down"]
` ` 逻辑运算,或

📦 第二部分:JsonPath 解析

当数据接口返回的是 JSON 格式时,使用 JsonPath 比正则表达式或字符串处理要高效得多。

1. 环境准备
  • 安装库 :

    复制代码
    pip install jsonpath
2. 核心用法
  1. 加载 JSON 对象 :

    复制代码
    import json
    import jsonpath
    
    # 从文件加载
    obj = json.load(open('data.json', 'r', encoding='utf-8'))
    # 或从字符串加载
    # obj = json.loads(response_text)
  2. 执行解析 :

    复制代码
    ret = jsonpath.jsonpath(obj, 'jsonpath语法')

Jsonpath使用参考http://blog.csdn.net/luxideyao/article/details/77802389


🍲 第三部分:BeautifulSoup 解析

BeautifulSoup(简称 bs4)是另一个非常流行的 HTML/XML 解析库,以接口设计人性化著称。

1. 核心简介
  • 优点:接口设计人性化,使用方便,容错性强。
  • 缺点 :解析效率通常低于 lxml。
2. 环境准备与创建对象
  • 安装库 :pip install bs4

  • 导入库 :from bs4 import BeautifulSoup

  • 创建对象 :

    复制代码
    # 解析服务器响应
    soup = BeautifulSoup(response.read().decode(), 'lxml')
    
    # 解析本地文件 (注意指定编码)
    soup = BeautifulSoup(open('1.html', encoding='utf-8'), 'lxml')
3. 节点定位(查找数据)
  • 根据标签名查找 :
    • soup.a:只能找到第一个 <a> 标签。
  • find 系列方法 :
    • find('a'):返回第一个匹配的标签对象。
    • find('a', title='名字'):根据属性查找。
    • find('a', class_='名字'):注意 ,因为 class 是 Python 关键字,所以要写成 class_。
    • find_all('a'):返回所有匹配的标签对象列表。
    • find_all(['a', 'span']):查找所有 <a> 和 <span> 标签。
    • find_all('a', limit=2):只查找前两个。
  • select 方法(推荐) :支持 CSS 选择器语法,功能强大。
    • 标签选择器 :soup.select('p')
    • 类选择器 :soup.select('.firstname')
    • ID 选择器 :soup.select('#firstname')
    • 属性选择器 :soup.select('li[class]') 或 soup.select('li[class="value"]')
    • 层级选择器 :
      • 后代选择器:div p (div 内部所有的 p)
      • 子选择器:div > p (div 的直接子元素 p)
    • 组合选择器 :soup.select('div, span') (查找所有 div 和 span)
4. 节点信息提取
  • 获取文本内容 :
    • obj.string:获取标签内的字符串。
    • obj.get_text():推荐,能获取标签内所有文本,即使有嵌套标签。
  • 获取标签名 :tag.name
  • 获取所有属性 :tag.attrs (返回一个字典)
  • 获取单个属性值 :
    • obj.attrs.get('title'):常用 ,如果属性不存在返回 None,不会报错。
    • obj.get('title')
    • obj['title']:如果属性不存在会报错。

📌 总结与建议

解析方式 适用场景 特点
XPath HTML/XML 文档 语法灵活,功能强大,效率高
JsonPath JSON 数据 处理 API 接口返回的 JSON 数据非常方便
BeautifulSoup HTML/XML 文档 接口友好,上手简单,容错性好
相关推荐
第九序言T2 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完
开发语言·python·自动化·pandas·数据处理
Java后端的Ai之路2 小时前
CAS并发控制-从CPU指令到企业级乐观锁
vue.js·人工智能·python·cas·乐观锁
qq_426003962 小时前
UI自动化高频次登录login限流解决方案
python·ui·自动化
Sakura_j_h_3 小时前
EasyEDA PCB 快速设计Skills
c++·python·github
龙亘川4 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读
java·大数据·开发语言·人工智能·信息可视化
程序喵大人4 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价
开发语言·c++·资源管理·智能指针·内存模型
quantdash_cc4 小时前
如何验证历史行情的交易日期是否完整覆盖研究区间?
python·数据分析·pandas·量化交易·股票数据·quantdash
I Am a robert girl4 小时前
当智能体学会“串通”:从长程交互中读懂涌现式合谋
python·多智能体系统·多智能体协作·llm agent·涌现式合谋·对齐问题·激励机制设计
Raas1004 小时前
AI网关部署方案?从部署到上线全流程
java·开发语言·人工智能·gateway·ai网关·企业级ai网关·企业级ai产品
云和数据.ChenGuang5 小时前
光哥说Python RAG 系统需要哪些评估指标:从检索到生成的全链路评测指南
网络·人工智能·python·算法·langchain