在Excel VBA中使用MSXML2.XMLHTTP从网站提取大量文本数据

8
我正尝试从finance.yahoo.com下载数千只股票的历史股价数据。该网站在单个页面上仅显示60天的数据,因此我必须循环遍历我要下载的时间段以及不同证券的循环。我已经使用了以下代码来访问相关页面。
Set httpObject = CreateObject("MSXML2.XMLHTTP")
httpObject.Open "GET", url, False
httpObject.send
webObject.body.innerHTML = httpObject.responseText

对于我访问的99%的数据,这个方法都能完美运行。但是偶尔会出现返回的对象为空,尽管在Internet Explorer中相同的URL会显示正确的数据。如果仅重新运行该URL的代码,则可能会在下一次成功或失败。

我想知道是否有更稳定/一致的方法来使用上述方法。我以前实施了InternetExplorer.Application方法来下载数据,但发现速度较慢且繁琐。

2个回答

7

检查readystate。

httpObject.ReadyState = 4

那意味着它已经加载完成。然后您可以检查状态。
httpObject.Status = 200

这意味着您没有弄错URL。如果readystate为4且状态为200,则可以读取responseText。


非常感谢您的快速回复。我会尝试这个方法,看看是否能解决我的问题。 - sinhars82

1
我曾经遇到过同样的问题,即使用 .Status = 0(即Ok)时得到了一个空响应。 后来发现我的问题在于,当你在浏览器中输入http时,会重定向到https。当我在请求中进行更改后,问题就解决了。
对于通用函数,您可以尝试使用http,如果您得到的是 .Status = 0.responseText = "",那么请再次尝试使用https。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接