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

Excel VBA通过CreateObject无法获取Yahoo Finance股价求助

解决Yahoo Finance VBA爬虫返回内容不可用的问题

核心原因

Yahoo Finance目前会拦截无真实浏览器标识的请求,MSXML2.XMLHTTP默认发送的请求头未模拟人类浏览器特征,被判定为非正常访问,因此返回拦截页面。

具体修复方案

1. 补充模拟浏览器的请求头

在发送请求前添加符合真实浏览器的请求头,核心是User-Agent,可额外补充其他常见头信息,让请求更贴近正常访问:

Dim xmlHttp As Object
Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0") '推荐使用6.0版本,兼容性更佳

xmlHttp.Open "GET", "你的Yahoo Finance目标URL", False
'添加关键请求头
xmlHttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
xmlHttp.setRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"
xmlHttp.setRequestHeader "Accept-Language", "en-GB,en;q=0.5" '匹配英国地区访问特征

xmlHttp.send

2. 替换为WinHTTP组件

若MSXML2.XMLHTTP仍被拦截,可尝试使用WinHttp.WinHttpRequest.5.1,它的请求特征与前者不同,可能绕过拦截:

Dim winHttp As Object
Set winHttp = CreateObject("WinHttp.WinHttpRequest.5.1")

winHttp.Open "GET", "你的Yahoo Finance目标URL", False
winHttp.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
winHttp.setRequestHeader "Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"
winHttp.send

'获取响应内容
Dim responseHtml As String
responseHtml = winHttp.responseText

3. 添加浏览器Cookie

手动访问Yahoo Finance时,浏览器会保存对应Cookie,可抓取一次浏览器请求的Cookie值,添加到请求头中:

xmlHttp.setRequestHeader "Cookie", "此处填入你手动抓取的Cookie内容"

注意Cookie存在过期时间,需要定期更新。

4. 控制请求频率

如果是批量爬取数据,添加随机延迟避免被判定为爬虫:

'随机延迟2-5秒
Application.Wait Now + TimeSerial(0, 0, Int((5 - 2 + 1) * Rnd + 2))

验证方式

发送请求后,先输出responseText的前几百字符,确认是否返回正常页面内容,再进行股价、分析师评级等数据的解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:04:52