Python;Ошибка urllib: AttributeError: у объекта 'bytes' нет атрибута 'read' - PullRequest
24 голосов
/ 01 июля 2011

Примечание: это 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'])

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

Ответы [ 4 ]

59 голосов
/ 01 июля 2011

Попробуйте это:

jsonResponse = json.loads(response.decode('utf-8'))
13 голосов
/ 01 июля 2011

Используйте json.loads, а не json.load.

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

2 голосов
/ 01 июля 2011

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

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

0 голосов
/ 17 июля 2018

Я получил ту же ошибку {AttributeError: у объекта 'bytes' нет атрибута 'read'} в python3.Это сработало для меня позже без использования json:

from urllib.request import urlopen
from bs4 import BeautifulSoup

url = 'https://someurl/'
page = urlopen(url)
html = page.read()
soup = BeautifulSoup(html)
print(soup.prettify('latin-1'))
...