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

通用解析—bs4+jsonpath

前言

其实大家应该都有所困扰,就是爬虫中的解析。无论是解析HTML还是解析JSON

这里给大家推荐个很好用的方法。

bs4+jsonpath

原理

将 HTML 转换为 JSON 的核心在于解析 HTML 的结构化标签并映射为 JSON 的键值对格式。

HTML 到 JSON 的转换本质上是结构化标记语言到数据交换格式的映射,其核心逻辑包含:

  1. DOM 树解析:通过解析器将 HTML 标签、属性和文本内容转化为树形结构(如 tag: “div”, attributes: {“class”: “container”}, children: […])
  2. 递归遍历:深度优先遍历 DOM 节点,将每个节点及其子节点转换为嵌套的 JSON 对象
  3. 类型处理:区分元素节点(ELEMENT_NODE)和文本节点(TEXT_NODE),后者直接存储为字符串
  4. 属性提取:将 HTML 标签属性(如 id、class)转换为 JSON 对象的键值对

安装

pip install bs4

pip install jsonpath

使用

from bs4 import BeautifulSoup
import jsondef html_to_json(html):soup = BeautifulSoup(html, 'html.parser')return parse_node(soup)def parse_node(node):if node.name is None:  # 文本节点return node.text.strip()result = {"tag": node.name}if node.attrs:result["attrs"] = node.attrsif node.contents:result["children"] = [parse_node(child) for child in node.contents if child.name or child.text.strip()]return result

没错 就是短短的这么几行代码 (可能还是有问题 毕竟是自写+GPT)

这里已经转换成JSON了。但是还远远不够。这里又要使用另一个库

jsonpath

没错,之前这个库可能大家用法只会简单的,但其实结合这个可以通过节点 像AST一样去解析代码。

面对又臭又长的屎山 出值,何尝不是一种乐趣呢?

这里给大家写个通用例子吧。

获取页面中所有的图片

$..*[?(@.tag == 'img')].attrs.src

获取h1标题

$..*[?(@.tag == 'h1').children[0]]

提取内容

$..[?(@.tag == 'div' && @.attrs['class'] =~ /.*content.*/i && !@.children[?(@.tag == 'em')]
)]

结语

只能说偶尔发现的小TIPS ,写多了估计也会腻。适合一些层级比较复杂的网站。理论上可以通杀一些网站的解析~~~

更多的还是依靠jsonpath的解析能力。偶尔水一篇吧 。

http://www.dtcms.com/a/174648.html

相关文章:

  • Redis 使用及命令操作
  • 实操3:6位数码管
  • C语言的重要知识点☞static关键字
  • 探索SQLMesh中的Jinja宏:提升SQL查询的灵活性与复用性
  • 人工智能任务24-AI学习中的模型训练中稀疏化参数与稀疏损失函数,以及实战项目应用
  • conda 安装cudnn
  • Android第六次面试总结之Java设计模式(二)
  • LeetCode 1. 两数之和(Java)
  • flex布局打印对联
  • 如何对 Redis 进行水平扩展和垂直扩展以应对微服务流量的增长?
  • C++ 重载
  • Matplotlib 饼图
  • 【C++】C++中的命名/名字/名称空间 namespace
  • 爱普生VG7050EFN压控晶振在小基站的应用优势
  • 【T2I】DreamBench++: A Human-Aligned Benchmark for Personalized Image Generation
  • Kali:利用rockyou文本字典hash破解zip压缩包密码
  • NetApp SAS 连接线:铜缆与光缆的全面介绍
  • 开源智能体MetaGPT记忆模块解读
  • 【5G通信】天线调整
  • 【AI】用AI将文档、文字一键生成PPT的方法(百度的自由画布版)
  • STL详解 - map和set
  • 性能分析硬核特训 · Perf 全面指南:内核实例 + 原理实战 + 面试答疑
  • JAVA SE(9)——多态
  • OpenCV进阶操作:角点检测
  • n8n系列(1)初识n8n:工作流自动化平台概述
  • 基于 GO 语言的 Ebyte 勒索软件——简要分析
  • 【Vue】全局事件总线 TodoList 事件总线
  • HTML07:表格标签
  • 全球10公里分辨率的玉米、小麦、水稻和大豆生产栅格数据集(2010-2020)
  • K8S - Volume 与 PersistentVolume - 容器存储与数据持久化