Извлечение данных с VBA с сайта погоды - PullRequest
1 голос
/ 15 апреля 2020

Я пытаюсь скопировать указанные c данные из таблицы прогноза погоды в https://www.wunderground.com. Точнее, я пытаюсь получить время и облачный покров в Excel в табличном формате (но пока подойдет любой формат) по ссылке типа https://www.wunderground.com/hourly/ro/mizil/45.00, 26.44 / date / 2020-04- 15 . До сих пор я пробовал много способов получить эти специфические c данные, но у меня не получается (я новичок в веб-поиске с VBA). Концепции и команды мне вполне понятны, и они работали для других сайтов, но для этого сайта я нахожусь в тупике. В настоящее время я использую:

Sub WeatherScrap()

Range("A1").Select

Dim mainlink As String Dim http As New XMLHTTP60, html As New HTMLDocument Dim CloudCover As Object

mainlink = "https://www.wunderground.com/hourly/ro/mizil/45.00,26.44/date/2020-04-15"

    With http
        .Open "GET", mainlink, False
        .send
        html.body.innerHTML = .responseText
    End With

    For Each CloudCover In html.getElementsByClassName("wu-value wu-value-to")
        ActiveCell.Value = CloudCover.innerText
        ActiveCell.Offset(1, 0).Select
    Next CloudCover

End Sub

Я явно не ссылаюсь на правильные классы, теги или идентификаторы на html (я пробовал со многими до сих пор, но ни один из них не извлекает нужные данные). Элемент html на сайте:

<lib-display-unit _ngcontent-app-root-c213="" _nghost-app-root-c122="" class="ng-star-inserted"><span _ngcontent-app-root-c122="" class="test- wu-unit wu-unit-chance ng-star-inserted"><!----><!----><!----><span _ngcontent-app-root-c122="" class="wu-value wu-value-to">100</span>&nbsp;<span _ngcontent-app-root-c122="" class="wu-label"><span _ngcontent-app-root-c122="" class="ng-star-inserted">%</span>

На данный момент достаточно просто понять, как получить процент облачного покрова из таблицы. Кто-нибудь может помочь? Большое спасибо!

1 Ответ

0 голосов
/ 16 апреля 2020

Я не прочитал весь ваш вопрос, но, полагаю, вы хотите что-то подобное (это довольно распространенный способ взаимодействия с веб-таблицей).

Sub Web_Table()
    Dim HTMLDoc As New HTMLDocument
    Dim objTable As Object
    Dim lRow As Long
    Dim lngTable As Long
    Dim lngRow As Long
    Dim lngCol As Long
    Dim ActRw As Long
    Dim objIE As InternetExplorer
    Set objIE = New InternetExplorer
    objIE.Navigate "https://www.wunderground.com/hourly/ro/mizil/45.00,26.44/date/2020-04-15"

    Do Until objIE.ReadyState = 4 And Not objIE.Busy
        DoEvents
    Loop
    Application.Wait (Now + TimeValue("0:00:03")) 'wait for java script to load
    HTMLDoc.body.innerHTML = objIE.Document.body.innerHTML
    With HTMLDoc.body
        Set objTable = .getElementsByTagName("table")
        For lngTable = 0 To objTable.Length - 1
            For lngRow = 0 To objTable(lngTable).Rows.Length - 1
                For lngCol = 0 To objTable(lngTable).Rows(lngRow).Cells.Length - 1
                    ThisWorkbook.Sheets("Sheet1").Cells(ActRw + lngRow + 1, lngCol + 1) = objTable(lngTable).Rows(lngRow).Cells(lngCol).innerText
                Next lngCol
            Next lngRow
            ActRw = ActRw + objTable(lngTable).Rows.Length + 1
        Next lngTable
    End With
    objIE.Quit
End Sub

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...