Vba 从网站上抓取数字的问题

Vba 从网站上抓取数字的问题,vba,excel,web-scraping,screen-scraping,Vba,Excel,Web Scraping,Screen Scraping,我已经相当习惯于刮削,这使得这成为一个相当恼人的问题-我试图使用GET方法刮削VBA,但要获得Revolute提供的欧元对BHD的汇率,并使用以下代码: Sub My_Scraper() Dim oXHTTP As Object Dim doc As New HTMLDocument Dim html As String Dim url As String url = "https://www.revolut.com/converter/EURBHD" Set oXHTTP = Create

我已经相当习惯于刮削,这使得这成为一个相当恼人的问题-我试图使用GET方法刮削VBA,但要获得Revolute提供的欧元对BHD的汇率,并使用以下代码:

Sub My_Scraper()
Dim oXHTTP As Object
Dim doc As New HTMLDocument
Dim html As String
Dim url As String

url = "https://www.revolut.com/converter/EURBHD"

Set oXHTTP = CreateObject("MSXML2.XMLHTTP")
oXHTTP.Open "GET", url, False
oXHTTP.send
html = oXHTTP.responseText
Set oXHTTP = Nothing
doc.body.innerHTML = html
Debug.Print doc.getElementsByClassName("rvl-Rate-rateLabel")(0).innerHTML                 ' Returns "Current rate" as expected
Debug.Print doc.getElementsByClassName("rvl-Rate-rateLabel")(0).NextSibling.innerHTML     ' Reurns "0" (not the rate quoted

End Sub
我在上面的代码中打印了两个同级节点,当我查看
parentElement
innerHTML
时,仍然不清楚为什么会发生这种情况(我有正确的HTML片段,但响应是(在父级-但与开发工具控制台不匹配)

当前费率
0
以下是开发人员工具控制台:

站点在加载时重建DOM是很常见的,我想这就是您遇到问题的原因。我可以建议使用稍微不同的方法。 如果在浏览器中检查请求,您会发现:

https://www.revolut.com/api/quote/internal?symbol=EURBHD ...

删除EURBHD之后的所有内容,您将看到更容易解析的内容。

这就是获取转换值的整个脚本的外观:

Sub GetVal()
    Dim res As Variant

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://www.revolut.com/api/quote/internal?symbol=EURBHD", False
        .send
        res = .responseText
    End With

    res = Split(Split(res, "rate"":")(1), ",")(0)
    MsgBox res
End Sub

转换后的值是动态生成的,因此您无法使用
xmlhttp
serverhttp
winhttp
请求获取转换后的值,因为它们无法处理动态内容。您应该选择IE或Sam提供的url。谢谢-我已使用复杂的
Mid()解析了它
功能-拆分解决方案更干净!
Sub GetVal()
    Dim res As Variant

    With CreateObject("MSXML2.XMLHTTP")
        .Open "GET", "https://www.revolut.com/api/quote/internal?symbol=EURBHD", False
        .send
        res = .responseText
    End With

    res = Split(Split(res, "rate"":")(1), ",")(0)
    MsgBox res
End Sub