web-dev-qa-db-ja.com

Python; urllibエラー: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'])

動作しません...理由がわかりません。

25
Parseltongue

これを試して:

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

_json.loads_ではなく_json.load_を使用します。

loadはファイルのようなオブジェクトからロードし、loadsは文字列からロードします。したがって、代わりに.read()呼び出しを省略することもできます。)

13
Katriel

python 3にはまだ慣れていませんが、urllib.request.urlopen()。read()は文字列ではなくバイトオブジェクトを返すようです。

それをStringIOオブジェクトにフィードするか、str(response)を実行することもできます。

2

Python3で同じエラー{AttributeError: 'bytes'オブジェクトには属性 'read'}がありません。これは後で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'))
0
Banjali