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

我试图从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方法来下载数据,但发现要慢得多和麻烦。

检查readystate。

 httpObject.ReadyState = 4 

这意味着它已经完成加载。 然后你可以检查状态

 httpObject.Status = 200 

这意味着你没有搞乱url。 如果readystate是4,状态是200,那么你可以读取responseText。

我有同样的问题,得到一个空repsonse,与.Status = 0 (即确定)。 我的问题原来是,当你浏览器中的httpredirect到https。 当我在要求中改变它的时候很好。

对于一个通用函数,你可以尝试http,如果你得到.Status = 0.responseText = "" ,然后用https重复。