Как сканировать Googlemaps из VBA Excel? - PullRequest
0 голосов
/ 25 сентября 2019

Как настоящий новичок в программировании, я ищу здесь помощь!

Я хотел бы извлечь данные из GoogleMaps: скажем, почтовый индекс, из данных компании в ячейке в Excel, через VBA.

Когда я начал кодировать, я столкнулся с трудностями науровень строки, так как я не могу нацелить на точный тег (здесь, я думаю, это точка, диапазон) и эффективно извлечь почтовый индекс в адресной строке на HTML-странице Googlemaps:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = Range("nom").Row And _
    Target.Column = Range("nom").Column Then
     Dim GM As New InternetExplorer
     GM.Visible = True
     GM.navigate "https://www.google.fr/maps/@43.3082377,5.4259519,17z?q=" & Range("nom").Value
     Do
     DoEvents
     Loop Until GM.readyState = READYSTATE_COMPLETE
     Dim doc As HTMLDocument
     Set doc = GM.document
     Dim sSPAN As String
     sSPAN = Trim(doc.getElementsByTagName("span")(4).innerText)
     MsgBox sSPAN

    End If
End Sub

Строка 13отображает следующие ошибки:

Ошибка запуска Titre 91: переменная объекта или переменная блока не установлена ​​

, поскольку я не могу выбрать точный блок.

После этого у меня два вопроса:

  1. Можно ли эффективно извлечь данные из Карт Google?(Через VBA или API Google с открытым исходным кодом, извлеченные из листа Google (10000 строк Excel)
  2. Кто-нибудь сталкивался с подобными трудностями? Как выбрать точный блок на HTML-странице Googlemaps?

1 Ответ

1 голос
/ 25 сентября 2019

Я бы так не поступил, и API определенно предпочтительнее, но не через GoogleMaps, если вы не создаете приложение, в которое вы также можете встроить требуемую карту.

Вам нужно правильное ожидание загрузки страницы, ожидание присутствия элемента, выход из приложения в конце и использование другой стратегии выбора.Вы также хотите реализовать некоторую логику для извлечения почтового кода из адреса (я не уверен, какой вид вы получили. Я использовал тестовое значение Enterome):

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim t As Date, gm As New InternetExplorer
    Const MAX_WAIT_SEC As Long = 10

    If Target.Row = Range("nom").Row And Target.Column = Range("nom").Column Then

        gm.Visible = True
        gm.navigate "https://www.google.fr/maps/@43.3082377,5.4259519,17z?q=" & Range("nom").Value

        While gm.Busy Or gm.readyState <> 4: DoEvents: Wend

        Dim elem As Object

        t = Timer
        Do
            On Error Resume Next
            Set elem = gm.document.querySelector(".section-info-text")
            On Error GoTo 0
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop While elem Is Nothing

        If Not elem Is Nothing Then
            MsgBox Trim$(elem.innerText)
            'Implement logic to extract post code
        End If
        gm.Quit
    End If
End Sub
...