html转json需先提取结构化数据:js用textcontent.trim()取表格内容并映射为json;python用正则提取script中json片段再loads解析;beautifulsoup处理表单时优先取value等属性,注意编码与字段清洗。

直接保存 HTML 源码为 JSON 格式没有意义——JSON 是结构化数据格式,HTML 是标记文档格式,二者语义不同。你真正需要的,是「从 HTML 中提取有意义的结构化数据,再组织成 JSON」。
用 JavaScript 提取表格并转成 JSON(浏览器环境)
这是最常见也最稳的场景:后台导出的报表页、管理后台列表页等固定结构表格。
- 别用
innerText:某些浏览器会吞掉换行和多余空格,导致字段值被意外合并 - 优先用
textContent.trim()获取每个<td> 或 <code><th> 的纯文本 <li>表头必须单独处理:用 <code>document.querySelectorAll('table th')或首行<td> 提取列名,避免依赖 class 或 data-key <li>数据行从第二行开始遍历(<code>index > 0),跳过表头干扰 - 遇到
colspan/rowspan直接跳过或打日志——这类结构无法无损映射到扁平 JSON
示例关键逻辑:
const headers = Array.from(document.querySelectorAll('table th')).map(th => th.textContent.trim());
const rows = Array.from(document.querySelectorAll('table tr')).slice(1);
const json = rows.map(row => {
const cells = row.querySelectorAll('td');
return Object.fromEntries(
headers.map((h, i) => [h, cells[i]?.textContent.trim() || null])
);
});
用 Python 解析本地 .txt 文件里的嵌入 JSON(如 quickviews.push({}))
很多前端页面把核心数据藏在 <script></script> 标签里,比如 quickviews.push({"usage":"188,426 mi"})。这时不能靠字符串 find('"usage":') 硬切——缩进、换行、转义都会让定位失效。
- 用正则匹配完整 JSON 对象:模式如
r'quickviews\.push\(\s*({[^}]*?})\s*\)',注意非贪婪匹配和括号嵌套限制 - 提取到字符串后,必须用
json.loads()解析,不是eval()——后者有执行风险且不处理 Unicode 转义 - 如果 JSON 片段含换行或缩进,正则需加
re.DOTALL标志 - 字段访问要用
.get('usage', None),避免 KeyError;值里带逗号单位(如"188,426 mi")要后续清洗
用 BeautifulSoup + json.dumps 处理表单或列表(Python 爬虫常用)
当目标是表单字段、新闻列表、商品卡片这类语义清晰但结构松散的内容时,BeautifulSoup 比正则更可靠。
- 不要用
element.text直接取值:可能混入隐藏文本、注释或脚本内容 - 对输入框优先读
el.get('value'),对<select></select>读选中项的option[selected],对复选框收集所有checked的value - 构造字典后,用
json.dumps(data, ensure_ascii=False, indent=2)输出可读 JSON - 注意编码:读取
.txt或.html文件时显式指定encoding='utf-8',否则中文会乱码
真正的难点不在“怎么转”,而在“转什么”——HTML 里大量内容是装饰性、布局性或动态生成的,强行塞进 JSON 只会让结果臃肿难用。先明确你要的字段边界,再选工具,比一上来就写正则或遍历 DOM 更省时间。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











