跟进使用VBA从网页表中提取值

问题描述 投票:0回答:1

今天早些时候,我问了以下问题使用 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
html vba web-scraping
1个回答
0
投票

当您使用帖子中的 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
© www.soinside.com 2019 - 2024. All rights reserved.