You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提取HTML脚本中REA JS变量并转换为标准JSON格式

内嵌script标签中REA房产数据转JSON可靠方案

不要用正则逐行匹配的方案,这类方案对JS嵌套对象、数组、转义字符、换行拆分的代码容错性极差,只要源码里出现字符串包含赋值关键字、嵌套层级调整就会解析失败,维护成本极高。

具体实现流程

  • 提取目标script标签内容
    用标准HTML解析器定位id="P4EPconfig"的script标签,直接读取标签内部的纯JS文本,不要用正则切割HTML,避免标签注释、属性变体干扰提取结果。
    Python环境示例代码:
    from bs4 import BeautifulSoup
    
    # 传入待解析的完整HTML字符串
    soup = BeautifulSoup(html_raw, "html.parser")
    script_text = soup.find("script", id="P4EPconfig").string
    
  • 沙箱执行JS片段捕获REA对象
    不需要手动实现JS语法解析,直接在隔离的JS运行时中执行提取到的脚本,提前在上下文中声明REA占位对象,执行完成后就能拿到完整的结构化数据,完全兼容所有JS合法语法,不管是直接整体赋值REA对象、逐行挂载属性、还是给window.REA赋值都能正常捕获。
    Python环境可使用js2py实现,示例代码:
    import js2py
    
    # 初始化隔离上下文,提前声明占位对象
    js_context = js2py.EvalJs()
    js_context.execute("var REA = {}; var window = {REA: REA};")
    # 执行脚本内容,所有REA相关赋值会自动写入上下文
    js_context.execute(script_text)
    # 转换为Python原生字典结构
    rea_result = js_context.REA.to_dict()
    

    若脚本中包含DOM操作、浏览器API调用逻辑,只需要在上下文中提前mock掉document、navigator等浏览器对象即可,不需要修改原始脚本内容。

  • 序列化输出标准JSON
    拿到原生结构化对象后,直接用标准JSON序列化工具输出即可,最终输出的嵌套结构和源码中REA的属性结构完全一致,包含房产ID、区位信息、坐标、房源图、户型参数、土地面积、估值、交易趋势等所有挂载字段,不需要提前做字段映射。
    示例代码:
    import json
    
    # 输出格式化后的标准JSON文件
    with open("rea_data.json", "w", encoding="utf-8") as f:
        json.dump(rea_result, f, ensure_ascii=False, indent=2)
    

方案对比正则的优势

  • 容错性强:支持任意层级的对象、数组嵌套,自动处理字符串转义、换行拆分的代码逻辑,不会出现漏匹配、错切结构的问题
  • 维护成本低:不需要针对不同字段写单独的匹配规则,不需要适配源码的格式调整,核心代码仅十余行
  • 字段无遗漏:REA对象下所有层级的属性都会被完整提取,不需要提前枚举字段名

内容的提问来源于stack exchange,提问作者CTK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 15:30:49