簡體   English   中英

錯誤(429)在Python中使用geopy進行地理編碼時請求太多

[英]error (429) Too Many Requests while geocoding with geopy in Python

我有一個大約20k行的Pandas數據幀,我試圖通過地址列將其編碼為緯度/經度坐標。

我如何使用time.sleep()或其他函數來阻止OSM Nominatim從我現在得到的Too Many Requests 429 error

這是我用於此的代碼:

from geopy.geocoders import Nominatim
from geopy.distance import vincenty

geolocator = Nominatim()
df['coord'] = df['address'].apply(geolocator.geocode).apply(lambda x: (x.latitude, x.longitude))
df.head()

提前致謝!

從1.16.0開始,geopy包含一個RateLimiter類,它通過在查詢之間添加延遲並重試失敗的請求,提供了一種處理Too Many Requests 429 error的便捷方法。

from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent="specify_your_app_name_here")

from geopy.extra.rate_limiter import RateLimiter
geocode = RateLimiter(geolocator.geocode, min_delay_seconds=1)

df['coord'] = df['address'].apply(geocode).apply(lambda location: (location.latitude, location.longitude))
df.head()

文檔: https//geopy.readthedocs.io/en/1.16.0/#usage-with-pandas

我想你會使用for循環。 沒有看到你的數據,它看起來就像這樣。

x = df['address'].tolist()
names = []

for item in x:
    d={}
    a = geolocator.geocode(item, exactly_one=True, timeout=60)
    try:
        d["Latitude"] = a.latitude
    except:
        pass
    try:
        d["Longitude"] = a.longitude
    except:
        pass
    time.sleep(2)
    names.append(d)

d

這是你在再次運行循環之前等待2秒的睡眠方式。 此外,如果地理定位器無法找到緯度和經度,它將通過而不是退出循環並讓您重新開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM