【发布时间】:2021-11-25 22:45:28
【问题描述】:
我正在尝试从以下网站下载历史黄金价格表: www.lbma.org.uk/prices-and-data/precious-metal-prices#/table
Dim http As MSXML2.XMLHTTP60
Set http = New MSXML2.XMLHTTP60
With http
.Open "GET", "https://www.lbma.org.uk/prices-and-data/precious-metal-prices#/table", True
.setRequestHeader "User-Agent", "Mozilla/5.0"
.setRequestHeader "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT"
.send
Do ' Wait till the page is loaded
DoEvents
Sleep (1)
Loop Until .ReadyState = 4
End With
http.responseText 长 115kB,包含页面中的所有文本等,但没有包含黄金价格数据的实际表格。我对 xmlhttp 很陌生 - 知道我做错了什么吗?
【问题讨论】:
-
您使用的方法适用于您想要的内容包含在页面源中的页面:在提供页面后在浏览器中创建内容的页面通常需要不同的方法。您可以尝试自动化 IE 或查看 Selenium Basic。
-
我还看到可以通过将某些标头编码为 URL 格式来生成“导出到 xlsx”地址。这将让您中途自动将最近的数据下载到 xlsx 文件中,然后您可以使用 VBA 打开和复制数据。这是解码后的 URL:
https://prices.lbma.org.uk/export/xls/?c={"metals":["gold"],"type":"daily","currency":["usd","gbp","eur"],"published":["am","pm"],"dates":{"start":"2021-01-01","end":"2021-10-05"}} -
谢谢,我试图避免使用 IE11,因为我发现它在 VBA 中完全没有希望,而且它几乎已经过时了。关于 URL(设计得很好!),但我需要它完全自动化并且看不到如何让 Excel “按保存”。我想我可以使用 AutoIt,但它有点啰嗦(= 不可靠)
-
@drb01 您希望能够选择下载数据的日期吗?如果是,那么 URL 方法似乎就是这样做的方法。至于“按保存”,您甚至都不需要。 VBA 会在后台下载 excel 文件,复制感兴趣的数据,关闭下载的 excel 文件并将数据粘贴到 您的 excel 文件中。如果您不关心选择日期,那么网站会返回一个 huge JSON 响应,其中包含从 1968 年到今天的所有数据。当然,一旦下载,您仍然可以获得所需的日期,但这需要一段时间......
标签: excel vba xmlhttprequest