【问题标题】:Convert google search results into json in python 3.1在 python 3.1 中将谷歌搜索结果转换为 json
【发布时间】:2010-01-26 22:35:12
【问题描述】:

我正在编写一个 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 对象,它确实包含一个 read() 方法,这是 json 规范所要求的,但它是一个字节对象。因此,我无法访问 2.6 中的信息。

有没有办法访问google返回的json?如何在 Python 3 中获得结果并能够选择我想要的字段,就像我对 json 所做的那样?

非常感谢, bsg

【问题讨论】:

    标签: python json httpresponse google-search-api


    【解决方案1】:

    如果你想将字节对象与json.loads一起使用,你需要解码它

    resultjson =  json.loads(results.read().decode())
    

    docs also suggest 将编码参数传递给loads 函数:

    json.loads(results.read(), encoding=<encoding-type>)
    

    我认为 Lennart 解释了如何获取编码类型。

    【讨论】:

      【解决方案2】:

      urlopen 返回的对象 is 文件之类的,你错了。但是您使用 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"]
      

      可能会奏效。 (我没有测试过)。

      【讨论】:

        猜你喜欢
        • 2012-04-10
        • 1970-01-01
        • 2016-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多