如何从VBA Excel抓取Googlemap?

问题描述 投票:0回答:1

作为真正的编码初学者,我正在这里寻求一些帮助!

[我想通过VBA从excel单元格中公司输入的邮政编码中提取GoogleMaps中的数据:

[当我开始编码时,在字符串级别遇到了困难,因为我无法定位准确的标签(在这里,我认为那是重点,跨度),无法在Googlemaps HTML页面的地址行上有效地提取邮政编码。 :

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行显示以下错误:

运行滴度错误91:对象变量或未设置块变量的情况

因为我无法选择准确的块。

此后,我有两个问题:

  1. 是否可以有效地从Google地图提取数据? (通过VBA或开源Google API从Google表格中提取(10000行Excel)
  2. 有人曾经遇到过这种困难吗?如何在Googlemaps HTML页面上选择准确的块?
excel vba google-maps web-crawler extract
1个回答
1
投票
您需要适当的页面加载等待,等待元素出现,最后退出应用程序,并使用其他选择器策略。您还希望实现一些逻辑以从地址中提取邮政编码(我不确定您得到的视图是什么。我使用了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

© www.soinside.com 2019 - 2024. All rights reserved.