今天早些时候,我问了以下问题使用 VBA 从网页表中提取值。所有答案都为我提供了一种访问 HTML 对象内部数据的方法。
我想对另一个网站做同样的事情,但似乎没有一个答案有效。网站是https://www.bcb.gov.br/。第一个盒子
#home > div > div:nth-child(1) > div.componente.cotacao > div
包含我想要的信息:
#home > div > div:nth-child(1) > div.componente.cotacao > div > cotacao > table:nth-child(1) > tbody > tr:nth-child(1) > td:nth-child(2) > span
外部 HTML
<span _ngcontent-epj-c113="">5,2037</span>
完整 Xpath:
/html/body/app-root/app-root/div/div/main/dynamic-comp/div/div/div/div[1]/div[1]/div/cotacao/table[1]/tbody/tr[1]/td[2]/span
我还尝试了使用VBA从网站提取div类信息循环通过类名或标签名中给出的解决方案。
这是提取网站并尝试循环标记名称的示例代码
Sub WebData()
Dim http As New XMLHTTP60, html As New HTMLDocument
Dim source As Object
With http
.Open "GET", "https://www.bcb.gov.br", False
.send
html.body.innerHTML = .responseText
End With
For i = 1 To 1000
Cells(i, 1) = html.getElementsByTagName("td")(i).innerText
Next i
End Sub
当您使用帖子中的 url 发出 HTTP 请求时,脚本无法查看数据,因为所需的数据是通过外部 API 加载的。尝试用这种方式来获取值。
Sub GrabCertainValue()
Const Url$ = "https://www.bcb.gov.br/api/servico/sitebcb/indicadorCambio"
Dim oHttp As Object, WS As Worksheet
Dim Rxp As Object, sResp$, jVal As Object
Dim valorCompra$
Set WS = ThisWorkbook.Worksheets("Sheet1")
Set oHttp = CreateObject("MSXML2.XMLHTTP")
Set Rxp = CreateObject("VBScript.RegExp")
With oHttp
.Open "GET", Url, False
.setRequestHeader "Accept", "application/json, text/plain, */*"
.send
sResp = .responseText
End With
valorCompra = vbNullString
With Rxp
.Global = True
.MultiLine = True
.Pattern = "valorCompra"":(.*?),"
Set jVal = .Execute(sResp)
If jVal.Count > 0 Then
valorCompra = jVal(0).submatches(0)
End If
End With
WS.Cells(1, 1) = valorCompra
End Sub