我正在尝试从 finance.yahoo.com 下载 1000 只股票的历史股价数据。该网站仅在单个页面上显示60天的数据,因此我必须循环浏览我正在下载的时间段以及不同证券的循环。我使用以下代码访问相关页面。
Set httpObject = CreateObject("MSXML2.XMLHTTP")
httpObject.Open "GET", url, False
httpObject.send
webObject.body.innerHTML = httpObject.responseText
对于我访问的 99% 的数据来说,这就像一个魅力。但是时不时地,网站返回的对象被证明是空的,即使完全相同的URL会在Internet Explorer中向我显示正确的数据。如果我只重新运行该 URL 的代码,下次可能会失败,也可能不会失败。
我想知道是否有使用上述方法的更稳定/一致的方式。我以前已经实现了InternetExplorer.Application方法来下载数据,但发现它要慢得多,而且很麻烦。
检查就绪状态。
httpObject.ReadyState = 4
这意味着它已完成加载。然后,您可以检查状态
httpObject.Status = 200
这意味着您没有弄乱 URL。如果 readystate 为 4,状态为 200,则可以读取 responseText。
我遇到了同样的问题,得到了一个空的回复,.Status = 0
(即确定)。事实证明,我的问题是当您进入浏览器时,http会重定向到https。当我在我的请求中更改它时,它很好。
对于通用函数,您可以尝试 http,如果您得到 .Status = 0
和 .responseText = ""
,然后重复但使用 https。