Verwenden Sie "Byte-ähnliches Objekt" von urlopen.read mit json?

Nur versuchen, auszuprobieren sehr einfache Python json Befehle, aber mit einigen Schwierigkeiten.

urlopen('http://www.similarsitesearch.com/api/similar/ebay.com').read() 

Sollte ausgeben

 '{"num":20,"status":"ok","r0":"http:\\/\\/www.propertyroom.com\\/","r1":"http:\\/\\/www.ubid.com\\/","r2":"http:\\/\\/www.bidcactus.com\\/","r3":"http:\\/\\/www.etsy.com\\/","r4":"http:\\/\\/us.ebid.net\\/","r5":"http:\\/\\/www.bidrivals.com\\/","r6":"http:\\/\\/www.ioffer.com\\/","r7":"http:\\/\\/www.shopgoodwill.com\\/","r8":"http:\\/\\/www.beezid.com\\/","r9":"http:\\/\\/www.webidz.com\\/","r10":"http:\\/\\/www.auctionzip.com\\/","r11":"http:\\/\\/www.overstock.com\\/","r12":"http:\\/\\/www.bidspotter.com\\/","r13":"http:\\/\\/www.paypal.com\\/","r14":"http:\\/\\/www.ha.com\\/","r15":"http:\\/\\/www.onlineauction.com\\/","r16":"http:\\/\\/bidz.com\\/","r17":"http:\\/\\/www.epier.com\\/","r18":"http:\\/\\/www.sell.com\\/","r19":"http:\\/\\/www.rasmus.com\\/"}' 

Aber ich bekomme die gleiche Saite, mit einem 'b' vorne:

 b'{"num":20,"status":"ok","r0":"http:\\/\\/www.propertyroom.com\\/","r1":"http:\\/\\/www.ubid.com\\/","r2":"http:\\/\\/www.bidcactus.com\\/","r3":"http:\\/\\/www.etsy.com\\/","r4":"http:\\/\\/us.ebid.net\\/","r5":"http:\\/\\/www.bidrivals.com\\/","r6":"http:\\/\\/www.ioffer.com\\/","r7":"http:\\/\\/www.shopgoodwill.com\\/","r8":"http:\\/\\/www.beezid.com\\/","r9":"http:\\/\\/www.webidz.com\\/","r10":"http:\\/\\/www.auctionzip.com\\/","r11":"http:\\/\\/www.overstock.com\\/","r12":"http:\\/\\/www.bidspotter.com\\/","r13":"http:\\/\\/www.paypal.com\\/","r14":"http:\\/\\/www.ha.com\\/","r15":"http:\\/\\/www.onlineauction.com\\/","r16":"http:\\/\\/bidz.com\\/","r17":"http:\\/\\/www.epier.com\\/","r18":"http:\\/\\/www.sell.com\\/","r19":"http:\\/\\/www.rasmus.com\\/"}' 

Anschließend, wenn ich versuche zu laufen

 json.loads(urlopen('http://similarsitesearch.com/api/similar/ebay.com').read()) 

Es gibt mir die Fehlermeldung "TypeError: kann kein String-Muster auf einem Bytes-ähnlichen Objekt verwenden", was ich annehme, hat etwas mit dem 'b' zu tun?

Ich habe urlopen aus urllib.request importiert und laufe Python 3.

Irgendwelche Ideen?

5 Solutions collect form web for “Verwenden Sie "Byte-ähnliches Objekt" von urlopen.read mit json?”

Der Inhalt von read () ist vom Typ Bytes, also musst du ihn in einen String konvertieren, bevor er versucht, ihn in ein json-Objekt zu dekodieren.

Um Bytes in einen String zu konvertieren, ändere deinen Code an: urlopen('http://similarsitesearch.com/api/similar/ebay.com').read().decode("utf-8")

Es hat gut geklappt:

 def myView(request): encoding = request.read().decode("utf-8") dic = json.loads(encoding) print(dic) 

Sie müssen den im Content-Type Header angegebenen Zeichensatz untersuchen und darauf json.load*() , bevor Sie ihn an json.load*() .

Urllib gibt ein Byte-Array zurück, das ich annehme, ist die Voreinstellung in py3, und json erwartet einen String. Versuchen Sie, den Rückgabewert in einem Str () – Aufruf zu verpacken, bevor Sie den Json-Anruf aufrufen

 j = str(urlopen('http://similarsitesearch.com/api/similar/ebay.com').read()) json.loads(j) 

Sieht aus wie ein Byte Literal . Untersuchen Sie, wie Sie die Daten mit http erhalten oder wie die API die Daten in den Headern zurückgibt.

  • Warum sieht der Text von Seiten aus, die manchmal wie Kauderwelsch aussehen?
  • Wie stelle ich Cookies mit Python urlopen ein?
  • Ist urllib2.urlopen () Cache Zeug?
  • Http.client.RemoteDisconnected Fehler beim Lesen / Analysieren einer Liste von URLs
  • Wie bekomme ich eine Nicht-Ascii-URL mit Python urlopen?
  • Python 3.5.1 urllib hat keine Attributanfrage
  • MacOS Sierra / Python2.7.13 URLError: <urlopen Fehler EOF trat bei Verstoß gegen das Protokoll auf (_ssl.c: 661)>
  • Gibt es eine Möglichkeit, die Amazon Product Listing Seite mit Python zu kratzen?
  • Kauderwelsch aus urlopen
  • Das Schaben der zweiten Seite einer Website in Python funktioniert nicht
  • Python ist die beste Programmiersprache der Welt.