wake-up-neo.com

Python; Ullib-Fehler: AttributeError: 'Bytes'-Objekt hat kein Attribut' Lesen '

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.

20
Parseltongue

Versuche dies:

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

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.)

12
Katriel

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.

2

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'))
0
Banjali