VBA Web Scraping: объект оказывается пустым (getelementbyID) - PullRequest
0 голосов
/ 04 февраля 2020

Я намерен извлечь информацию с сайта ниже (сайт на малайском языке), содержащего информацию о тендерах. https://tender.selangor.my/results?type=tenders

Мой код такой же, как показано ниже, но объект 'Тендеры' отображается как Ничто, из-за чего я не могу двигаться дальше. Надеюсь, вы сможете поделиться некоторыми советами о том, что я делаю неправильно.

Worksheets("Data").Cells.Clear

Dim xhr As Object
Dim html As New HTMLDocument
Dim tenders As Object, item As Object, item2 As Object
Dim tender As Object
Dim i As Integer

Set xhr = CreateObject("MSXML2.XMLHTTP")

With xhr
    .Open "GET", "https://tender.selangor.my/results?type=tenders", False
    .send

    If .readyState = 4 And .Status = 200 Then
        html.body.innerHTML = .responseText
    Else
        MsgBox "Error" & vbNewLine & "Ready state: " & .readyState & _
        vbNewLine & "HTTP request status: " & .Status
    End If

End With

Set tenders = html.getElementById("DataTables_Table_0")

1 Ответ

1 голос
/ 04 февраля 2020

Интересующее вас табличное содержимое генерируется динамически, поэтому вы можете использовать Internet Explorer или выполнить запросы http для получения http с соответствующими параметрами для анализа содержимого json с помощью сторонней библиотеки. Поскольку первый вариант прост в использовании go, я создал такой же пример:

Sub GetInformation()
    Dim tenders As Object

    With CreateObject("InternetExplorer.Application")
        .Visible = True
        .navigate "https://tender.selangor.my/results?type=tenders"
        While .Busy Or .readyState < 4: DoEvents: Wend
        Application.Wait Now + TimeValue("00:00:05")
        Set tenders = .document.getElementById("DataTables_Table_0")
        Debug.Print tenders.innerText
        .Quit
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...