Python 错误:";无法解码任何JSON对象";在Geopy中,提取lat时,从geocode_url中选择long
我正在使用以下代码:Python 错误:";无法解码任何JSON对象";在Geopy中,提取lat时,从geocode_url中选择long,python,json,geocoding,geopy,Python,Json,Geocoding,Geopy,我正在使用以下代码: from geopy import geocoders def main(): gn = geocoders.GeoNames() city = 'roman' place, (lat, lng) = gn.geocode_url('http://www.geonames.org/advanced-search.html?q='+city+'&country=FR&featureClass=A&continentCod
from geopy import geocoders
def main():
gn = geocoders.GeoNames()
city = 'roman'
place, (lat, lng) = gn.geocode_url('http://www.geonames.org/advanced-search.html?q='+city+'&country=FR&featureClass=A&continentCode=&fuzzy=0.6')
location, (lat, lon) = geocodes[0]
print lat, lon
考虑到特定的URL配置(在法国,feature=a,fuzzy=0.6),我想打印从Geopy网站返回的城市的第一个结果
然而,我不断从上面的代码中得到一个“没有JSON对象可以被解码”错误。有什么问题吗?我对geopy或GeoNames数据库不太熟悉,但你是想向我请求什么吗?您给出的URL似乎返回一个正常的网页,而不是JSON响应,除非发生了一些棘手的事情 API似乎有类似的参数,尽管它确实需要用户名/帐户。也许你的意思是:
http://api.geonames.org/searchJSON?q=paris&country=FR&featureClass=A&continentCode=&fuzzy=0.6&maxRows=10&username=demo
您应该使用JSON Web服务:
url = 'http://ws.geonames.org/searchJSON?q=%s&country=FR&featureClass=A&continentCode=&fuzzy=0.6'
gn.geocode_url(url % city)
添加更多参数的正确方法是使用urlencode
,urlgeocode
使用:
from urllib import urlencode
params = {
'q': 'roman',
'featureClass': 'A',
'fuzzy': '0.6',
'country': 'FR'
}
gn.geocode_url(gn.url % urlencode(params))
ws.geonames.org
不需要凭据。奇怪的是,它似乎在一年多的时间里被弃用为api.
,但仍然有效,并被geopy
@PavelAnossov>使用。看起来他们正在向新系统过渡(有利率限制),而且,ws.
主机名可能在将来的某个不确定的时刻停止使用:如果城市将根据其所遍历的文本文件的内容而改变,我如何使用params功能?更改'q':
,就像您要更改城市一样。