
本文介绍如何使用 Python 从保存 HTML 源码的 .txt 文件中精准提取 JavaScript 对象中的特定字段(如 "usage":"188,426 mi"),核心方法是结合正则表达式定位 JSON 片段,并用 json.loads() 安全解析。
本文介绍如何使用 python 从保存 html 源码的 `.txt` 文件中精准提取 javascript 对象中的特定字段(如 `"usage":"188,426 mi"`),核心方法是结合正则表达式定位 json 片段,并用 `json.loads()` 安全解析。
在网页抓取或数据清洗场景中,有时 HTML 源码会被预先保存为纯文本文件(如 first_truck_source.txt),其中关键数据(如车辆里程、价格、位置等)并非直接以 HTML 标签形式存在,而是嵌入在 <script> 标签内的 JavaScript 对象中——例如 quickviews.push({...}); 这类动态初始化语句。此时,直接用字符串索引(如 find('"usage":'))虽能定位起始位置,但难以健壮地提取完整值(尤其当格式缩进、换行或内容含特殊字符时),也不具备可扩展性。
推荐做法是:识别并提取完整的 JSON 字符串片段 → 解析为 Python 字典 → 按键安全访问目标字段。以下为完整、鲁棒的实现方案:
import re
import json
def extract_usage_from_html_txt(filepath):
"""
从 HTML 源码文本文件中提取 quickviews.push() 内的 'usage' 字段值
"""
try:
with open(filepath, 'r', encoding='utf-8') as f:
for line in f:
# 使用正则匹配 quickviews.push(...) 的完整 JSON 内容(非贪婪)
match = re.search(r'quickviews\.push\((\{.*?\})\);precheckCompare', line)
if match:
json_str = match.group(1)
try:
data = json.loads(json_str)
return data.get('usage', 'usage not found')
except json.JSONDecodeError as e:
print(f"JSON 解析失败: {e}")
return None
return "未找到 quickviews.push(...) 语句"
except FileNotFoundError:
print(f"错误:文件 '{filepath}' 不存在")
return None
except Exception as e:
print(f"读取文件时发生异常: {e}")
return None
# 使用示例
usage_value = extract_usage_from_html_txt('first_truck_source.txt')
print(f"提取到的里程信息: {usage_value}") # 输出: 提取到的里程信息: 188,426 mi✅ 关键优势说明:
- 精准定位:正则 r'quickviews\.push\((\{.*?\})\);precheckCompare' 确保只捕获 push( 和 );precheckCompare 之间最内层的 JSON 对象(.*? 非贪婪匹配,避免跨多行误截)。
- 结构化解析:json.loads() 将字符串转为字典,天然支持嵌套访问与类型校验,远比字符串切片可靠。
- 健壮容错:通过 try/except 处理文件不存在、编码错误、JSON 格式异常等常见问题;使用 .get() 避免 KeyError。
- 可复用性强:只需修改 data.get('usage') 中的键名,即可提取 price、description 等任意字段。
⚠️ 注意事项:
立即学习“前端免费学习笔记(深入)”;
- 若 JSON 跨多行(本例中为单行),需启用 re.DOTALL 标志并调整正则(如 r'quickviews\.push\(([\s\S]*?)\);precheckCompare');但更推荐先用 BeautifulSoup 或 lxml 解析 HTML,再定位 <script> 内容,再提取 JSON,以应对复杂场景。
- 切勿使用 eval() 解析 JSON 字符串——存在严重安全风险(可执行任意代码)。
- 确保文本文件编码为 UTF-8(尤其含中文、特殊符号时),显式指定 encoding='utf-8' 可避免解码错误。
该方法兼顾简洁性与生产级可靠性,是处理嵌入式前端数据的标准实践。



















