Hinweis: Dies ist Python 3, es gibt kein urllib2. Ich habe auch versucht, json.loads () zu verwenden, und ich bekomme diese Fehlermeldung:
TypeError: can't use a string pattern on a bytes-like object
Ich erhalte diesen Fehler, wenn ich json.loads () verwende und .read () aus der Antwort entferne:
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'])
Funktioniert nicht ... Ich habe keine Ahnung warum.
Versuche dies:
jsonResponse = json.loads(response.decode('utf-8'))
Verwenden Sie json.loads
nicht json.load
.
(load
wird von einem dateiähnlichen Objekt geladen, loads
von einem String. Sie können den Aufruf von .read()
also genauso gut weglassen.)
Ich bin mit Python 3 noch nicht vertraut, aber es scheint, als würde urllib.request.urlopen (). Read () ein Byte-Objekt und keinen String zurückgeben.
Sie könnten versuchen, es in ein StringIO-Objekt einzugeben oder sogar eine str (Antwort) auszuführen.
Ich habe den gleichen Fehler {AttributeError: 'Bytes'-Objekt hat kein Attribut' read '} in python3 . Dies funktionierte später ohne 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'))