[英]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.