Python中的地理编码

3
我正在使用Python中的geocoder包获取一组地址(约30k)的坐标。我遇到了以下错误:
未知状态码 https://maps.googleapis.com/maps/api/geocode/json:ERROR - HTTPSConnectionPool(主机='maps.googleapis.com',端口=443):在url时超出最大重试次数: /maps/api/geocode/json?address=Rancho+Palos+Verdes%2CCA%2CUS&bounds=&components=&region=&language= (由ProxyError('无法连接到代理。',timeout('已超时',))引起)
如果我添加time.sleep(x)函数,错误发生的次数会减少,但执行代码的时间显著增加。是否有更有效的方法运行代码?
以下是代码片段:
for add in clean_address:
    g=geocoder.google(add)
    time.sleep(7)
    if(g.ok==True):
        lat.append(str(g.lat))
        lon.append(str(g.lng))
    if(g.ok==False):
        lat.append("")
        lon.append("")

3
谷歌的地理编码API只有免费额度,在超出额度后,你可能会被限制访问。如果你需要更多额度,就必须注册并支付费用以获得更多的访问量。 - tzaman
有使用 Google API 的原因吗?你可以使用没有使用限制的 ArcGIS API:g=geocoder.arcgis(add)。 - Lupanoide
@Lupanoide - 感谢您向我推荐ArcGIS。它在获取我31k条记录的坐标时更加准确和快速。 - Mazahir Bhagat
@Lupanoide - 你能把你的评论发表为答案,这样我就可以接受它了吗? - Mazahir Bhagat
@MazahirBhagat 当然,谢谢。 - Lupanoide
3个回答

3
Google API有使用限制。但是,您可以使用收集了许多地理编码服务的geocoder库。我建议您使用ArcGis api,它没有任何使用限制,并且非常精确。 其使用非常简单:
g=geocoder.arcgis(add)
lat.append(g.x)
lon.append(g.y)

ArcGIS在处理几百条记录后仍然超时。我对Python还是新手,想知道一种捕获此错误并继续执行的方法。 - Dennis M. Gray

2
这是一个源自Python的requests库的错误,该库由geocoder包使用。该错误本身很可能是超出您的项目启用API所配置的配额限制的症状。您可能会遇到短期配额(每100秒)和长期配额(每天)。
如果错误是由于超过短期配额而导致的,则采用指数退避的自动重试可能会有所帮助。为此,请显式创建一个带有自定义RetrySession,并将该会话与geocoder库一起使用:
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

...

# Retry for up to 65 seconds
ssn = requests.Session()
adp = HTTPAdapter(max_retries=Retry(total=16, backoff_factor=0.001))
ssn.mount('https://', adp)
ssn.mount('http://', adp)

...

geocoder.google(..., session=ssn)

很棒的答案,但是有一个后续问题:在R中添加重试功能的方法是什么?我有一些运行相同问题的R代码... - David Miller

1

您的地址是30K,每天限额为2.5K

正如Google在相关文档中引用的:

要使用Google Maps Geocoding API,您必须在Google API控制台上注册您的应用程序项目,并获取一个Google API密钥,您可以将其添加到您的应用程序或网站中。

这样做后,这些就是限制:

标准API的用户:

  • 每天免费请求2,500次,计算为客户端和服务器端查询的总和。
  • 每秒50个请求,计算为客户端和服务器端查询的总和。

在S.O.中有下投票警察吗?我需要起诉某人。 - raratiru
1
没有警察。但我会为你平衡一下。我相信这回答了OP的问题。 - MattR
1
踩你的人就像警察(至少是其中的一部分)。别担心,平均统计数据会对你有利。+1 - Mad Physicist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接