我想从这里提取数据: http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getMakes
到目前为止,这是我的python脚本:
import urllib.request
import json
url =("http://www.carqueryapi.com/api/0.3/?callback=?&cmd=getMakes")
request = urllib.request.Request(url)
response = urllib.request.urlopen(request)
result = response.read().decode('utf-8')
print (result)
当我试图操纵结果时,从:
开始d = json.loads(result)
我收到一条错误消息:“ValueError:无法解码JSON对象”
我做错了什么?
答案 0 :(得分:2)
您的网址/查询错误;您没有从服务器获得有效的JSON回复;它是这样开始的:
?({"Makes":[{"make_id":"abarth","make_display":"Abarth","make_is_common":"0","make_country":"Italy"},
如果您修改这样的网址:
url = ("http://www.carqueryapi.com/api/0.3/?cmd=getMakes")
它应该有用。至少它在那之后对我有用。
显然,callback=?
意味着客户端可以插入一个传递json的回调方法。即你可以让服务器生成可执行的javascript,而不仅仅是json。
答案 1 :(得分:0)
如果我点击你的网址,正文中的第一个字符是“?(”。这会破坏你将其提供给JSON的尝试。你需要预先处理数据以去除垃圾。还有垃圾最后。
顺便说一句,使用Python请求库而不是urllib来节省头痛!