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

VBA爬取Redfin网页时JsonConverter解析JSON报错10001如何解决?

JSON解析报错原因
  • 转义处理逻辑错误:原代码使用Replace(itemStr, "\", "")全量删除反斜杠,破坏了JSON转义规则。Redfin返回的JS上下文内的对象字面量用\"转义双引号,全删反斜杠会同时破坏\n、\uXXXX、\\等合法转义结构,导致JSON格式失效。
  • 未做匹配校验:正则未匹配到对应内容时直接取下标jsonStr(0)会触发额外错误,也可能导致送入解析的内容为空或非法。
修正后代码
Sub GrabRedfinInfo()
    Const siteLink$ = "https://www.redfin.com/TX/Austin/604-Amesbury-Ln-78752/unit-2/home/171045975"
    Dim Http As Object
    Dim jsonObject As Object, jsonStr As Object
    Dim itemStr As String, sResp As String
    Dim sc As Object, i As Long
    
    ' 前置要求:已导入JsonConverter库,引用Microsoft Scripting Runtime
    Set Http = CreateObject("MSXML2.XMLHTTP.6.0")
    Set sc = CreateObject("ScriptControl")
    sc.Language = "JScript"

    With Http
        .Open "Get", siteLink, False
        .setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
        .send
        sResp = .responseText
    End With

    With CreateObject("VBScript.RegExp")
        .Global = False
        .Pattern = "reactServerState\.InitialContext = (.*?);[\r\n]"
        .MultiLine = True
        Set jsonStr = .Execute(sResp)
        If jsonStr.Count = 0 Then
            MsgBox "未匹配到目标数据段"
            Exit Sub
        End If
        itemStr = jsonStr(0).SubMatches(0)
    End With
    
    ' 用JS引擎直接序列化对象,避免手动处理转义出错
    itemStr = sc.Eval("JSON.stringify(" & itemStr & ")")
    Set jsonObject = JsonConverter.ParseJson(itemStr)
    
    ' 提取目标状态字段
    Dim targetData As Object
    Set targetData = jsonObject("ReactServerAgent.cache")("dataCache")("/stingray/api/home/details/belowTheFold")("res")("body")("nearbyHomes")("homes")
    For i = 1 To 4
        Debug.Print targetData(i)("listingStatus")
    Next i
End Sub
调整说明
  1. 转义处理改用JS引擎直接序列化对象:通过ScriptControl执行JS的JSON.stringify方法,自动处理所有转义符,输出标准JSON字符串送入解析,彻底解决转义错误问题。如果是64位Office环境无法使用ScriptControl,可以将转义处理代码替换为itemStr = Replace(Replace(itemStr, "\""", """"), "\\", "\") 即可。
  2. 正则优化:增加非贪婪匹配和末尾换行校验,确保提取的对象字面量完整无多余字符。
  3. 增加匹配校验:避免正则匹配失败时的下标越界错误。
  4. 数据路径调整:根据Redfin当前的JSON结构,定位到附近房源的listingStatus字段,遍历输出前4条即可得到预期结果。

内容的提问来源于stack exchange,提问作者robots.txt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:54:03