Json 检索包含AJAX内容的网页

Json 检索包含AJAX内容的网页,json,vba,excel,web-scraping,xmlhttprequest,Json,Vba,Excel,Web Scraping,Xmlhttprequest,我已经使用VBA从ASX网站(www.ASX.com.au)检索股票价格很长一段时间了,但是,我的脚本不再工作,因为网站已经更新,现在使用javascripts来构建内容 因此,下面显示的脚本现在返回的是部分,而不是页面内容 VBA(漂亮的股票标准): 使用CreateObject(“WINHTTP.WinHTTPRequest.5.1”)的 .打开“获取”,strURL,False 邮寄 http.body.innerHTML=.responseText 以 .responseText包含如

我已经使用VBA从ASX网站(www.ASX.com.au)检索股票价格很长一段时间了,但是,我的脚本不再工作,因为网站已经更新,现在使用javascripts来构建内容

因此,下面显示的脚本现在返回的是部分,而不是页面内容

VBA(漂亮的股票标准):

使用CreateObject(“WINHTTP.WinHTTPRequest.5.1”)的

.打开“获取”,strURL,False
邮寄
http.body.innerHTML=.responseText
以
.responseText包含如下内容:


var urlArray=window.location.hash.split('/');
if(urlArray!=null){
var var1=urlArray[1];
window.location=”http://www.asx.com.au/asx/research/companyInfo.do?by=asxCode&asxCode=“+var1;
}
如何在浏览器中检索网页?我唯一没有尝试过的就是创建一个浏览器对象,可以从中获取HTML。

该网站有一个可用的API。我通过链接在Chrome中为其中一家公司——AMC打开了一个页面,然后打开了开发者工具窗口(F12)、网络选项卡,并在单击每个部分后加载页面后检查了列表中的XHR。我发现了几个以JSON格式返回数据的URL:

要查看呈现数据的结构,可以将响应内容复制并粘贴到任何JSON查看器(例如,这个在线工具)

您可以使用下面的VBA代码来解析URL的响应并输出结果将模块导入VBA项目以进行JSON处理。

选项显式
子测试查询ASX()
Const Transposed=False“输出选项
用线表示的模糊sCode
像弦一样的暗黄色
朦胧的童子军
将字符串作为字符串
Dim vJSON作为变量
将状态设置为字符串
Dim aRows()
Dim aHeader()
sCode=“AMC”
sInterval=“每日”
Scont=“10”
'通过API获取JSON
使用CreateObject(“MSXML2.XMLHTTP”)
.打开“获取”https://www.asx.com.au/asx/1/share/&sCode&“/prices?interval=“&sInterval&”&count=“&scont,False
邮寄
sJSONString=.ResponseText
以
'解析JSON响应
解析sJSONString、vJSON、sState
如果sState=“Error”,则
MsgBox“无效JSON”
出口接头
如果结束
“挑选核心数据
vJSON=vJSON(“数据”)
'将每个数据集转换为数组
JSON.ToArray vJSON,aRows,aHeader
'将数组输出到工作表
使用此工作簿。工作表(1)
.Cells.Delete
如果转置,则
Output2DArray.Cells(1,1),WorksheetFunction.Transpose(aHeader)
Output2DArray.Cells(1,2),WorksheetFunction.Transpose(aRows)
其他的
输出阵列。单元格(1,1),A头
Output2DArray.Cells(2,1),aRows
如果结束
.Columns.AutoFit
以
MsgBox“已完成”
端接头
子输出阵列(oDstRng作为范围,aCells作为变型)
使用oDstRng
.Parent.Select
使用.Resize(1,UBound(aCells)-LBound(aCells)+1)
.NumberFormat=“@”
.Value=aCells
以
以
端接头
子输出2dArray(oDstRng作为范围,aCells作为变体)
使用oDstRng
.Parent.Select
使用。调整大小(_
UBound(aCells,1)-LBound(aCells,1)+1_
UBound(aCells,2)-LBound(aCells,2)+1)
.NumberFormat=“@”
.Value=aCells
以
以
端接头
运行
子测试\u query\u ASX()
以处理数据。表1中我的输出如下所示:

有了这个示例,您可以通过列出的URL从JSON响应中提取所需的数据。顺便说一句,采用了类似的方法

更新

在网站上进行一些更改后,有必要使用
https://www.asx.com.au/asx/...
而不是
http://www.asx.com.au/b2c-api/...
,所以我修复了上面所有的URL。

该网站有一个可用的API。我通过链接在Chrome中为其中一家公司——AMC打开了一个页面,然后打开了开发者工具窗口(F12)、网络选项卡,并在单击每个部分后加载页面后检查了列表中的XHR。我发现了几个以JSON格式返回数据的URL:

要查看呈现数据的结构,可以将响应内容复制并粘贴到任何JSON查看器(例如,这个在线工具)

您可以使用下面的VBA代码来解析URL的响应并输出结果将模块导入VBA项目以进行JSON处理。

选项显式
子测试查询ASX()
Const Transposed=False“输出选项
用线表示的模糊sCode
像弦一样的暗黄色
朦胧的童子军
将字符串作为字符串
Dim vJSON作为变量
将状态设置为字符串
Dim aRows()
Dim aHeader()
sCode=“AMC”
sInterval=“每日”
Scont=“10”
'通过API获取JSON
使用CreateObject(“MSXML2.XMLHTTP”)
.打开“获取”https://www.asx.com.au/asx/1/share/&sCode&“/prices?interval=“&sInterval&”&count=“&scont,False
邮寄
sJSONString=.ResponseText
以
'解析JSON响应
解析sJSONString、vJSON、sState
如果sState=“Error”,则
MsgBox“无效JSON”
出口接头
如果结束
“挑选核心数据
vJSON=vJSON(“数据”)
'将每个数据集转换为数组
JSON.ToArray vJSON,aRows,aHeader
'将数组输出到工作表
使用此工作簿。工作表(1)
.Cells.Delete
如果转置,则
Output2DArray.Cells(1,1),WorksheetFunction.Transpose(aHeader)
Output2DArray.Cells(1,2),WorksheetFunction.transp