作为一个真正的编码初学者,我正在这里寻求一些帮助!
我想从谷歌地图中提取数据:假设邮政编码,通过 VBA 从 excel 单元格中的公司输入中提取数据。
当我开始编码时,我在字符串级别遇到了困难,因为我无法定位准确的标签(我认为,但这就是重点,跨度(并有效地提取 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 行显示以下错误:
运行 Titre 错误 91:未设置对象变量或块变量
因为我无法选择准确的块。
在此之后,我有两个问题:
- 是否可以有效地从谷歌地图中提取数据?(通过VBA或开源的Google API,从Google工作表中提取(10000行excel(
- 有没有人遇到过这种困难?如何在谷歌地图HTML页面上选择准确的块?
这不是我会这样做的方式,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