Mor*_*tch 20 python geopy scrapy
我正在使用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))
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
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
Run Code Online (Sandbox Code Playgroud)
先感谢您!
Imr*_*ran 31
试试这个:
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))
Run Code Online (Sandbox Code Playgroud)
您还可以考虑增加对地理定位器进行的地理编码调用的超时.在我的例子中,它将是这样的:
location = geolocator.geocode(my_address, timeout=10)
Run Code Online (Sandbox Code Playgroud)
要么
location = geolocator.geocode(my_address, timeout=None)
Run Code Online (Sandbox Code Playgroud)
您可能遇到此问题,是因为您尝试多次请求此地址,并且由于其使用策略,它们暂时阻止了您或使您减速。它指出每秒的请求数不超过一个,并且您应该缓存结果。我遇到了这个问题,您有几个解决方案。如果您不想太多更改代码,则可以获取Google API密钥,该密钥可以免费用于每天2500个请求,也可以缓存结果。因为我已经在AWS上使用DynamoDB来解决问题,所以我继续进行操作,并创建了一个表,将结果缓存在其中。 这是我的代码的要旨。
我处理了同样的问题这么多天这是我的代码:
geolocator = Nominatim(user_agent="ny_explorer")
location = geolocator.geocode(address_venue)
Run Code Online (Sandbox Code Playgroud)
ERROR 服务超时
解决方案:添加一个声明超时的新属性:
location = geolocator.geocode(address_venue,timeout=10000)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21252 次 |
| 最近记录: |