【问题标题】:Error when trying to use urllib3 & json to get Rotten Tomatoes data (Python)尝试使用 urllib3 & json 获取烂番茄数据时出错 (Python)
【发布时间】:2014-08-07 18:45:39
【问题描述】:

作为 API 的介绍,我试图弄清楚如何使用 Rotten Tomatoes API 在 python 中访问数据。这也是我第一次接触json。

我使用的是 Python 3.4,并确认已安装 json 和 urllib3。

这是我的代码:

import urllib3
import json

url = 'http://api.rottentomatoes.com/api/public/v1.0/lists/movies/box_office.json?limit=16&country=us&apikey=API-KEY';

http = urllib3.PoolManager()
request = http.request('GET', url)
print (json.load(request));
request.release_conn()

这是我得到的错误:

Traceback (most recent call last):
  File "C:\Users\admnasst1\Documents\Personal\Python\RotTomTest.py", line 16, in <module>
    print (str(json.load(request)));
  File "C:\Python34\lib\json\__init__.py", line 268, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "C:\Python34\lib\json\__init__.py", line 312, in loads
    s.__class__.__name__))
TypeError: the JSON object must be str, not 'bytes'

由于我尝试了这么多新事物(API、urllib3、json),我不确定发生了什么。我已经尝试过执行上述代码的其他几个版本,但我一直收到相同的错误,所以我认为我一定缺少一些基本的东西......你们有没有人发现它?

【问题讨论】:

    标签: python json urllib3 rotten-tomatoes


    【解决方案1】:

    您需要将网络数据解码为字符串:

    json.loads(request.data.decode('utf8'))
    

    理想情况下,您会从 Content-Type 标头中检测出使用了什么编解码器;您将对其进行解析并查找 charset= 参数。 JSON 数据的默认编码是 UTF-8。

    如果您要使用第 3 方库,请改用 requests。它将urllib3 包装在一个友好的 API 中并且可以为你处理 JSON:

    import requests
    
    url = 'http://api.rottentomatoes.com/api/public/v1.0/lists/movies/box_office.json'
    params = {'limit': 16, 'country': 'us', 'apikey': 'API-KEY'}
    
    response = requests.get(url, params=params)
    print(response.json())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      相关资源
      最近更新 更多