问题
Note: This is Python 3, there is no urllib2. Also, I've tried using json.loads(), and I get this error:
TypeError: can't use a string pattern on a bytes-like object
I get this error if I use json.loads() and remove the .read() from response:
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'])
Does not work... I have no idea why.
回答1:
Try this:
jsonResponse = json.loads(response.decode('utf-8'))
回答2:
Use json.loads
not json.load
.
(load
loads from a file-like object, loads
from a string. So you could just as well omit the .read()
call instead.)
回答3:
I'm not familiar with python 3 yet, but it seems like urllib.request.urlopen().read() returns a byte object rather than string.
You might try to feed it into a StringIO object, or even do a str(response).
回答4:
I got the same error {AttributeError: 'bytes' object has no attribute 'read'} in python3. This worked for me later without using 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'))
来源:https://stackoverflow.com/questions/6541767/python-urllib-error-attributeerror-bytes-object-has-no-attribute-read