尝试使用urllib3&时出错json获取烂番茄数据(Python)

时间:2014-08-07 18:45:40

标签: python json urllib3 rotten-tomatoes

作为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),我并不完全确定会发生什么。我已经尝试过做上面代码的其他一些版本,并且我一直得到同样的错误,所以我想我必须遗漏一些基本的东西...你们有没有发现它?

1 个答案:

答案 0 :(得分:8)

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

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

理想情况下,您可以检测Content-Type标头中使用的编解码器;您解析它并查找charset=参数。 JSON数据的默认编码是UTF-8。

如果您要使用第三方库,请改用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())