我正在编写一个 Python 程序,该程序使用 google 搜索 API 向 google 提供搜索词并下载前 10 个结果。我能够在 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"]
Google 的搜索 API 以 json 形式返回结果,因此我使用上面的代码将结果下载到我的 json 中,并将它们解析为列表 (betterResults)。
当我切换到 Python 3 时,我的程序开始抛出异常。显然,在Python 2.6中,urlopen()返回的对象是一个类似文件的对象,可以加载到json中。在Python 3.1中,返回的对象是一个HTTPResponse对象,根据json规范的要求,它确实包含read()方法,但它是一个字节对象。因此,我无法像 2.6 中那样访问信息。
有什么办法可以访问google返回的json吗?如何在 Python 3 中获取结果并能够选择我想要的字段,就像我对 json 所做的那样?
非常感谢, BSG
最佳答案
如果您想将字节对象与 json.loads
一起使用,则需要对其进行解码
resultjson = json.loads(results.read().decode())
docs also suggest将编码参数传递给 loads
函数:
json.loads(results.read(), encoding=<encoding-type>)
我认为 Lennart 有一个解释如何获取编码类型。
关于python - 在python 3.1中将google搜索结果转换为json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2143206/