Подтвердить что ты не робот

Python; urllib error: AttributeError: объект 'bytes' не имеет атрибута 'read'

Примечание. Это Python 3, нет urllib2. Кроме того, я попытался использовать json.loads(), и я получаю эту ошибку:

TypeError: can't use a string pattern on a bytes-like object

Я получаю эту ошибку, если я использую json.loads() и удаляю .read() из ответа:

TypeError: expected string or buffer
<Р →
import urllib.request
import json

response = urllib.request.urlopen('http://www.reddit.com/r/all/top/.json').read()
jsonResponse = json.load(response)

for child in jsonResponse['data']['children']:
    print (child['data']['title'])

Не работает... Я понятия не имею, почему.

4b9b3361

Ответ 1

Попробуйте следующее:

jsonResponse = json.loads(response.decode('utf-8'))

Ответ 2

Используйте json.loads not json.load.

(load загружается из файла-подобного объекта, loads из строки. Таким образом, вы могли бы просто опустить вызов .read().)

Ответ 3

Я еще не знаком с python 3, но он похож на urllib.request.urlopen(). read() возвращает объект байта, а не строку.

Вы можете попытаться передать его в объект StringIO или даже выполнить str (ответ).