注意:这是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()
返回的是byte
对象而不是字符串。
您可以尝试将其输入到StringIO
对象中,甚至可以执行str(response)
。
我在python3中得到了相同的错误{AttributeError: 'bytes' object has no attribute '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'))