Ich versuche, eine URL mit Python abzurufen, und die Antwort lautet JSON. Wenn ich jedoch renne
import urllib2
response = urllib2.urlopen('https://api.instagram.com/v1/tags/pizza/media/XXXXXX')
html=response.read()
print html
Das HTML ist vom Typ str und ich erwarte einen JSON. Gibt es eine Möglichkeit, die Antwort als JSON oder Python-Wörterbuch anstelle einer str zu erfassen?
response.read()
eine gültige JSON-Zeichenfolge zurück?Antworten:
Wenn die URL gültige JSON-codierte Daten zurückgibt, verwenden Sie die
json
Bibliothek, um Folgendes zu dekodieren:quelle
response
Ihnen Bytestrings liefert undjson.load()
erwartet, einen Bytestring zu lesen. JSON muss mit einem UTF-Codec codiert werden. Dies funktioniert für UTF-8, UTF-16 und UTF-32, sofern für die beiden letztgenannten Codecs ein Stücklistencodepunkt enthalten ist. Die Antwort, auf die Sie verlinken, setzt voraus, dass UTF-8 verwendet wurde. Dies ist normalerweise richtig, da dies die Standardeinstellung ist. Ab Python 3.6json
decodiert die Bibliothek Bytecodes automatisch mit JSON-Daten, sofern eine UTF-Codierung verwendet wird.requests
Bibliothek verwenden, die auch automatisch den richtigen UTF-Codec erkennt, der verwendet werden soll, wenn die Stückliste fehlt und im Antwortheader kein Zeichensatz angegeben wurde. Verwenden Sie einfach dieresponse.json()
Methode.urllib für Python 3.4
HTTPMessage , zurückgegeben von r.info ()
quelle
print data
, der für Python 3 nicht falsch ist. Sollte seinprint(data)
.import urllib.request
. Außerdem ist diese .json-Datei in der URL nicht mehr vorhanden.Seien Sie vorsichtig bei der Validierung und so weiter, aber die richtige Lösung lautet:
quelle
quelle
from django.http import JsonResponse return JsonResponse({'key':'value'})
quelle
Einzeiler der Python 3-Standardbibliothek:
quelle
Obwohl ich denke, dass es bereits geantwortet hat, möchte ich mein kleines bisschen dazu hinzufügen
Hinweis: Objekt an json.load () übergeben sollte .read () unterstützen , daher würde urllib2.urlopen (self.name) .read () nicht funktionieren. Doamin bestanden sollte in diesem Fall mit Protokoll versehen werden http
quelle
Sie können json auch
requests
wie folgt erhalten:quelle
Dies ist eine weitere einfachere Lösung für Ihre Frage
Dabei ist data die str-Ausgabe des folgenden Codes
quelle
Keines der hier angegebenen Beispiele hat für mich funktioniert. Sie waren entweder für Python 2 (uurllib2) oder für Python 3 und geben den Fehler "ImportError: Kein Modul mit dem Namen request" zurück. Ich google die Fehlermeldung und es erfordert anscheinend, dass ich ein Modul installiere - was für eine so einfache Aufgabe offensichtlich nicht akzeptabel ist.
Dieser Code hat bei mir funktioniert:
quelle
urllib.urlopen
;urlopen
ist imurllib.request
Modul.