Python如何从script标签提取JS对象并解析得到指定HTML内容
实现方案
步骤1:提取JS对象文本片段
首先从你获取的script标签文本中定位到目标JS对象的范围:
大部分电商内嵌的业务数据都遵循变量名 = {JS对象字面量};的格式,你可以通过首尾大括号定位截取有效内容,示例代码如下:
# 假设你拿到的script标签完整内容存储在script_text变量中 # 定位目标JS对象的首个左大括号和最后一个右大括号 start_pos = script_text.find('{') end_pos = script_text.rfind('}') js_raw_str = script_text[start_pos:end_pos + 1]
如果script标签内存在多个JS对象,可以先定位到你要的对象对应的变量前缀,比如目标对象赋值给window.detailData,就先找到window.detailData = 的索引位置,再从该位置往后找第一个左大括号作为起始点即可。
步骤2:解析JS对象并提取目标字段
你之前用demjson的思路是可行的,demjson支持解析非严格JSON格式的JS字面量(比如键未加双引号、存在尾逗号等JSON不兼容的写法),直接调用解码方法即可:
import demjson # 解析JS对象 parsed_data = demjson.decode(js_raw_str) # 提取目标HTML内容 target_html = parsed_data['tabs'][0]['html']
如果demjson解析出现兼容问题,可替换为json5库解析,使用方式一致:
- 先安装依赖:
pip install json5 - 替换解析代码:
import json5 parsed_data = json5.loads(js_raw_str) target_html = parsed_data['tabs'][0]['html']
注意事项
- 如果JS对象中存在Unicode转义字符,可在截取后先处理转义:
js_raw_str = js_raw_str.encode('utf-8').decode('unicode_escape') - 如果对象嵌套层级过深,可先打印
parsed_data的结构确认字段路径和你预期一致。
内容的提问来源于stack exchange,提问作者gatorio
相关产品推荐
相关产品推荐

