How to avoid the
GeocoderTimedOut('Service timed out') error in GeoPy using the OSM Nominatim geocoder? I am not interested in using an exception and skip some entries. I already use a time delay of 1.1 seconds in my script using
time.sleep(1.1). Total database is 10,000 entries.
How to avoid the
Eventually I used the script with a 1 second delay. It took a while but the results are good.– RutgerHDec 15, 2015 at 23:41
You could make a recursive function. Just typing Python-esque pseudo-code:
from geopy.exc import GeocoderTimedOut def do_geocode(address, attempt=1, max_attempts=5): try: return geopy.geocode(address) except GeocoderTimedOut: if attempt <= max_attempts: return do_geocode(address, attempt=attempt+1) raise
This will keep retrying the
do_geocode function until it manages to return without a Timeout exception being raised. You might want to limit the number of attempts, or also set a waiting period after a failed attempt. You might also want to think about why a timeout is occurring. Geopy allows you to set the length of time to wait before raising a timeout error, for any of the geocoding methods, with the
timeout keyword argument. The documentation says that "some services are consistently slow", and recommends that this be increased.
thanks. this was indeed part of the solution. Make sure to import: from geopy.exc import GeocoderTimedOut– RutgerHMar 11, 2016 at 15:19
Hi, this did not work for me, I'm getting:
HTTPSConnectionPool(host='nominatim.openstreetmap.org', port=443): Max retries exceeded with url: /reverse?lat=32.782023&lon=35.478867&format=json&accept-language=en&addressdetails=1 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000001F7AA876240>: Failed to establish a new connection: [WinError 10061] No connection could be made because the target machine actively refused it',))Sep 1, 2020 at 6:50
@user88484 You may have exceeded their rate limits. operations.osmfoundation.org/policies/nominatim Maximum of one request per second. Sep 1, 2020 at 22:49
None to disable the timeout.
location = geolocator.geocode(county, timeout=None)
This solution will work in case of instability in the internet connection, or the remote server is slow to respond. Even if you put your device to sleep (of course not exiting your notebook.), it'll continue from the same spot where you left it.
In short, you're removing the limit of the number of requests by the API.