蟒蛇; urllib错误:AttributeError:'bytes'对象没有属性'read'

时间:2011-06-30 22:21:17

标签: python python-3.x urllib

注意:这是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 个答案:

答案 0 :(得分:58)

试试这个:

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

答案 1 :(得分:13)

使用json.loads而非json.load

load从类似文件的对象加载,loads来自字符串。所以你也可以省略.read()调用。)

答案 2 :(得分:2)

我还不熟悉python 3,但看起来像urllib.request.urlopen()。read()返回一个字节对象而不是字符串。

您可能尝试将其提供给StringIO对象,甚至可以执行str(响应)。

答案 3 :(得分:0)

我在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'))