gpt4 book ai didi

python - 谷歌的地理编码 API 关闭连接没有响应

转载 作者:行者123 更新时间:2023-12-04 09:51:11 24 4
gpt4 key购买 nike

我目前正在编写一个脚本来对地址列表进行地理编码,以便为分析和可视化做好准备。这是我第一次使用地理编码,所以我很挣扎,不确定这里是否缺少明显的东西。我正在使用 Google 的地理编码 API。

我的(未优化的)过程的大纲是将包含地址的 DataFrame 中的列转换为列表。然后,我使用列表理解从该列表创建一个新列表,其中每个元素都是我返回的数据的子集。

key = ...
city = "Long Beach"
state = "CA"

addresses = df["Address"].values.tolist()
geocodes = [geocode(x,city,state,key) for x in addresses]

下面是我用于地理编码的实际函数。它接收我的 API key 、地址和城市/州参数以提供移动完整地址。然后,它只是进行调用并返回我在响应中查找的三个元素的列表。

def geocode(address, city, state, key):
time.sleep(.05)
params = f"{address.lower()} {city}, {state}".replace(" ","+")
request_url = "https://maps.googleapis.com/maps/api/geocode/json?address="+params+f"&key={key}"
response = requests.get(request_url).json()
neighborhood = response["results"][0]["address_components"][2]["long_name"]
lat = response["results"][0]["geometry"]["location"]["lat"]
lon = response["results"][0]["geometry"]["location"]["lng"]
return [neighborhood, lat, lon]

当我运行它时,脚本会运行一段时间,然后失败。当它发生时,追溯会给我包含在下面的异常(exception)情况。到目前为止,我还没有找到关于这个问题可能是什么或者我应该如何诊断谷歌地理编码 API 问题的信息。他们提供了有关如何解释请求状态的信息,但是当我检查失败前返回的状态时,所有这些都是 'OK' 并且没有一个提供原因的指示连接正在关闭。

RemoteDisconnected: Remote end closed connection without response

During handling of the above exception, another exception occurred:

ProtocolError Traceback (most recent call last)
----------
ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

During handling of the above exception, another exception occurred:

ConnectionError Traceback (most recent call last)
----------
ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))

现在,我已经仔细研究过它并排除了一些目前为止的可能性:1. 我已经通过单个调用成功地尝试了这一点,并得到了我需要的东西。当我在列表上运行它时会出现问题。2. 我使用了 TQDM 并打印了状态(在不同的点),并且脚本确实成功地进行了调用,取回数据,并在失败之​​前多次移动到下一个。3.我不认为这是一个速率限制问题。此 API 没有每日限制,只有每秒查询次数限制为 50。我函数中的原始 time.sleep(.05) 应该将其保持在 20 QPS 左右,并让我低于该限制。

有人知道我的问题是什么吗?或者有人会解释我应该做什么额外的诊断吗?再一次,我是地理编码的新手,之前没有遇到过这个问题我有经验的 API,所以即使帮助理解正在发生的事情以便我自己解决它,如果没有人能找到问题,我将不胜感激.

最佳答案

尝试使用官方的 googlemaps py 模块。它也在后台使用 requests.Session 但我从来没有遇到过问题。您可能需要一些多线程,但如果您没有“太多”地址,这应该可以解决问题:

import time
import logging
import googlemaps


key = '...'
gmaps_client = googlemaps.Client(key=key)

addresses = [
["8473 Manor Station Street", "Cartersville", "GA"],
["14 Edgewater Ave.", "Ottumwa", "IA"],
["42 Aspen Court", "San Diego", "CA"]
]


def geocode(address, city, state):
time.sleep(.05)
params = f"{address.lower()} {city}, {state}".replace(" ", "+")

try:
response = gmaps_client.geocode(params)[0]

neighborhood = response["address_components"][2]["long_name"]
lat = response["geometry"]["location"]["lat"]
lon = response["geometry"]["location"]["lng"]

return [neighborhood, lat, lon]
except Exception as e:
logging.error(e)
return [None, None, None]


geocodes = [geocode(*group) for group in addresses]

print(geocodes)

关于python - 谷歌的地理编码 API 关闭连接没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62009874/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com