Проблемы соскоба цифры с сайта - PullRequest
0 голосов
/ 24 апреля 2018

Я довольно хорошо привык к тому, что это делает эту довольно неприятную проблему - я пытаюсь просмотреть VBA, используя метод GET, но получить обменные курсы евро к BHD, которые предлагает Revolut и которые использовали следующий код:

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

Есть 2 узла-брата, которые я напечатал в приведенном выше коде, и когда я посмотрел на уровень innerHTML из parentElement, все еще не ясно, почему это происходит (у меня есть правильный фрагмент HTML, но ответ (на родительском уровне - но не соответствует консоли инструментов разработчика);

<DIV class=rvl-Rate-rateLabel data-reactid="1920">Current rate</DIV>
<DIV class=rvl-Rate-rateNumber data-reactid="1921">0</DIV>

Вот консоль инструментов разработчика: enter image description here

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

И вот как должен выглядеть итоговый скрипт для получения преобразованного значения:

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
0 голосов
/ 24 апреля 2018

Обычно сайты перестраивают DOM во время загрузки, и я полагаю, именно поэтому вы получаете свою проблему. Вместо этого я могу предложить немного другой подход. Если вы изучите запросы в вашем браузере, вы найдете это:

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

Удалите все после EURBHD, и вам будет намного проще разбирать.

...