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
,url
geocode
使用:

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':
,就像您要更改
城市一样。