转换谷歌的搜索结果到JSON在Python 3.1
-
23-09-2019 - |
题
我写馈送一个搜索词使用谷歌搜索API和下载前10个结果到google Python程序。我是能够做到这一点在Python 2.6如下所示:
query = urllib.parse.urlencode({'q' : 'searchterm','start' : k},doseq=false)
url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' \
% (query)
results = urllib.urlopen(url)
resultsjson = json.loads(results.read())
betterResults += resultsjson["responseData"]["results"]
谷歌的搜索API返回结果为JSON,所以我用上面的代码下载结果到我的JSON和把它解析为一个列表(betterResults)。
当我切换到Python 3,我的计划开始抛出异常。显然,在Python 2.6的urlopen返回的对象()是一个类文件对象可加载到JSON。在Python 3.1,返回的对象是一个HttpResponse对象,它确实含有read()方法,所要求的JSON规范,但是一个字节对象。我因此无法获取信息,因为我在2.6了。
有什么办法来访问由谷歌返回的JSON?我怎样才能得到的结果在Python 3和能够选择哪些领域我想,因为我是能够与JSON办?
非常感谢你, BSG
解决方案
在对象通过的urlopen的为的返回,如文件,你就错了。但是你用json.loads(),它需要一个字符串。 json.load()期望像对象的文件。
然而,json.load()预计,read()方法的结果是一个字符串,而当然读你得到的将是字节,所以需要将其从字节首先解码为字符串。
所以,这样的事情:
query = urllib.parse.urlencode({'q' : 'searchterm','start' : k},doseq=false)
url = 'http://ajax.googleapis.com/ajax/services/search/web?v=1.0&%s' \
% (query)
results = urllib.urlopen(url)
encoding = input.getheader('content-type').split('=')[-1]
resultsjson = json.loads(results.read().decode(encoding))
betterResults += resultsjson["responseData"]["results"]
可能工作。 (我没有测试它)。
其他提示
您将需要解码的字节对象,如果你想与json.loads
使用它
resultjson = json.loads(results.read().decode())
文档还建议以通过编码参数到loads
功能:
json.loads(results.read(), encoding=<encoding-type>)
我认为伦纳特具有解释如何获得的编码类型。
不隶属于 StackOverflow