当前位置: 首页 > news >正文

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

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

🪓 第一部分: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']:如果属性不存在会报错。

📌 总结与建议

解析方式适用场景特点
XPathHTML/XML 文档语法灵活,功能强大,效率高
JsonPathJSON 数据处理 API 接口返回的 JSON 数据非常方便
BeautifulSoupHTML/XML 文档接口友好,上手简单,容错性好
http://www.jsqmd.com/news/1357054/

相关文章:

  • 如何快速设计完美农场布局:Stardew Valley农场规划器完全指南
  • AWS 监控、告警和日志分析,应该从哪些服务开始?
  • Unity资源逆向工程实战:从加密Bundle到完整资产恢复的技术指南
  • 从学生到大师:Transformer架构演进与AI应用实践指南
  • 滤波器的“插入损耗”是什么意思?
  • IPFS Desktop终极指南:三步实现去中心化文件管理的桌面革命
  • SQL Server T-SQL 一周学习完整概述|约束、多表查询、子查询、事务、模糊查询全套实战
  • MiniMax H3与Luma Agents集成:从2K视频生成到本地部署全攻略
  • C#中的多线程
  • 二进制文件编辑器ImHex安装步骤
  • 透明紫穿搭指南:打破色彩偏见,轻松驾驭日常休闲场景
  • 量子计算基础:单量子比特逻辑门原理与应用
  • agent开发学习【第一篇】
  • 工业陶瓷盘点:国内先进精密陶瓷零部件供应商选型指南
  • PyQt5 MDIArea窗口管理系统开发实战
  • 英语句型完全教程(从简单到复杂)
  • Unity RTS开发实战:从ECS架构到性能优化的完整指南
  • 从零到一构建可持续盈利的分销网络:架构、运营与实战避坑指南
  • Python数据分析与爬虫实战:从零到项目上手的核心路径
  • Unity DOTS与MonoBehaviour高效通讯:命令组件、单例与事件缓冲区实战
  • Unity区块链插件全栈开发:实现游戏道具资产化与NFT集成
  • 面向参赛备赛群体 南京智升学教育2026南京奥数竞赛备考白皮书
  • 大模型端侧部署实战:从模型选型到终端集成的完整指南
  • 构建高可用工作流定时任务系统:从架构设计到生产实践
  • 高新技术企业认定全流程与核心条件解析
  • 本地PV、PC、PVC等材料炼油该怎么选
  • IT-Tools 开源项目本地部署手册(Windows 11 + Conda 环境)
  • 【系列:MiniKV 原理剖析 · 第 2 篇】
  • 六自由度空地导弹弹道仿真与混合控制策略
  • 国内云服务器终于能用 Codex + DeepSeek 了!