scrapy Geopy:捕获超时错误

gcuhipw9  于 2023-01-20  发布在  其他
关注(0)|答案(4)|浏览(213)

我正在使用geopy来对一些地址进行地理编码,我想捕捉超时错误并将其打印出来,这样我就可以对输入进行一些质量控制。我正在将地理编码请求放在try/catch中,但它不起作用。有什么想法吗?
下面是我的代码:

try:
  location = geolocator.geocode(my_address)               
except ValueError as error_message:
  print("Error: geocode failed on input %s with message %s"%(a, error_message))

我得到了以下异常:

File "/usr/local/lib/python2.7/site-packages/geopy/geocoders/base.py", line 158, in _call_geocoder
    raise GeocoderTimedOut('Service timed out')
    geopy.exc.GeocoderTimedOut: Service timed out

先谢谢你!

kuuvgm7e

kuuvgm7e1#

试试这个:

from geopy.geocoders import Nominatim
from geopy.exc import GeocoderTimedOut

my_address = '1600 Pennsylvania Avenue NW Washington, DC 20500'

geolocator = Nominatim()
try:
    location = geolocator.geocode(my_address)
    print(location.latitude, location.longitude)
except GeocoderTimedOut as e:
    print("Error: geocode failed on input %s with message %s"%(my_address, e.message))

你也可以考虑增加对地理定位器的地理编码调用的超时时间,在我的例子中,它可能是这样的:

location = geolocator.geocode(my_address, timeout=10)

location = geolocator.geocode(my_address, timeout=None)
kg7wmglp

kg7wmglp2#

我处理同样的问题这么多天,这是我的代码:

geolocator = Nominatim(user_agent="ny_explorer")
location = geolocator.geocode(address_venue)

错误服务超时

解决方案:添加一个声明超时的新属性:

location = geolocator.geocode(address_venue,timeout=10000)
u5rb5r59

u5rb5r593#

您可能遇到此问题,因为您多次尝试请求此地址,但由于usage policy,他们暂时阻止您或减慢您的速度。它规定每秒的请求数不得超过一个,并且您应缓存结果。我遇到了此问题,您有几个解决方案。如果您不“不要想改变你的代码太多,你可以得到一个谷歌API密钥,你可以使用像2500请求/天免费或你可以缓存你的结果。因为我已经在AWS上使用DynamoDB来解决我的问题,所以我继续创建了一个表,并将结果缓存在. Here is the gist of my code.

kmynzznz

kmynzznz4#

from geopy.geocoders import Nominatim
geolocator = Nominatim(user_agent='xyz', timeout=200)

添加超时将解决此问题

相关问题