注:これは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'])
動作しません...理由がわかりません。
これを試して:
jsonResponse = json.loads(response.decode('utf-8'))
_json.loads
_ではなく_json.load
_を使用します。
(load
はファイルのようなオブジェクトからロードし、loads
は文字列からロードします。したがって、代わりに.read()
呼び出しを省略することもできます。)
python 3にはまだ慣れていませんが、urllib.request.urlopen()。read()は文字列ではなくバイトオブジェクトを返すようです。
それをStringIOオブジェクトにフィードするか、str(response)を実行することもできます。
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'))