python - 在python 3.1中将google搜索结果转换为json

标签 python json httpresponse google-search-api

我正在编写一个 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/

相关文章:

python - 如何优化运行 4**k 次的 python 脚本?

python - 全局名称未定义 - python

javascript - Angular 中的数组映射

python - 在 Python 中将 JSON 文件平铺到 Pandas Dataframe 中

typescript - 从 Typescript 中的 http 响应获取 header 值

python - 如何在 Pyqt4 中设置 QTableView 标题名称

python - 屏蔽 numpy 数组的特定列

arrays - 使用 JSON 对 Swift 数组进行排序

c# - 使用 Web 服务响应

python - django:将 BadRequest 引发为异常?