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

使用VBA导入Yahoo Finance股票数据失效问题求助

Yahoo Finance股票价格导入Excel的VBA失效解决方案

问题分析

原代码依赖的Crumb验证机制在2024年9月24日失效,请求返回内容为不完整的HTML片段(如e html> <ht),导致无法提取有效Crumb,后续数据处理环节触发报错。核心原因是Yahoo Finance更新了反爬策略或页面结构,原有的固定位置截取11位Crumb的逻辑已不再适用。

修改后的解决方案代码

Sub getCookieCrumb(crumb As String, cookie As String, validCookieCrumb As Boolean)
    Dim i As Integer
    Dim objRequest As Object
    Dim regex As Object
    Dim matches As Object
    
    validCookieCrumb = False
    Set regex = CreateObject("VBScript.RegExp")
    regex.Pattern = """crumb"":""([^""]+)""" ' 正则匹配Crumb字段
    regex.Global = False
    
    For i = 0 To 5
        Set objRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
        With objRequest
            .Open "GET", "https://finance.yahoo.com/quote/AAPL/history?period1=1503558000&period2=1535094000&interval=1wk&filter=history&frequency=1wk", False
            ' 添加模拟浏览器的请求头,规避反爬拦截
            .SetRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"
            .SetRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8"
            .SetRequestHeader "Accept-Language", "zh-CN,zh;q=0.9"
            .SetRequestHeader "Upgrade-Insecure-Requests", "1"
            .send
            .WaitForResponse 10
            
            ' 从响应头提取Cookie
            cookie = .GetResponseHeader("Set-Cookie")
            ' 用正则表达式匹配页面中的Crumb
            Set matches = regex.Execute(.ResponseText)
            If matches.Count > 0 Then
                crumb = matches(0).SubMatches(0)
                ' 验证Crumb有效性(当前Yahoo的Crumb长度不再固定为11位)
                If Len(crumb) > 0 Then
                    validCookieCrumb = True
                    Exit For
                End If
            End If
        End With
    Next i
    
    ' 释放对象
    Set objRequest = Nothing
    Set regex = Nothing
    Set matches = Nothing
End Sub

关键修改点说明

  • 模拟浏览器请求:添加User-Agent等请求头,避免被Yahoo的反爬系统识别为非浏览器请求,解决返回不完整HTML的问题。
  • 正则匹配Crumb:改用正则表达式匹配"crumb":"..."格式的字段,相比固定位置截取,更适配页面结构的变化。
  • Cookie提取:完善Cookie的获取逻辑,确保后续请求能携带有效验证信息。

注意事项

  • 若仍出现拦截,可更新User-Agent为当前主流浏览器的最新标识(可通过浏览器开发者工具查看)。
  • Yahoo Finance的反爬策略可能持续更新,若此方法再次失效,需重新分析页面结构或考虑使用官方API(需注意官方API可能需要申请密钥)。
  • 确保VBA编辑器中已启用WinHttp.WinHttpRequest.5.1组件(路径:工具→引用→勾选对应组件)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 02:00:16