J'essaye d'obtenir une URL en utilisant Python et la réponse est JSON. Cependant, quand je cours
import urllib2
response = urllib2.urlopen('https://api.instagram.com/v1/tags/pizza/media/XXXXXX')
html=response.read()
print html
Le html est de type str et j'attends un JSON. Existe-t-il un moyen de capturer la réponse sous forme de JSON ou d'un dictionnaire python au lieu d'un str.
response.read()
une chaîne JSON valide?Réponses:
Si l'URL renvoie des données codées JSON valides, utilisez la
json
bibliothèque pour décoder cela:la source
response
vous donne des chaînes d'octets etjson.load()
s'attend à lire une chaîne d'octets. JSON doit être encodé à l'aide d'un codec UTF, et ce qui précède fonctionne pour UTF-8, UTF-16 et UTF-32, à condition qu'un point de code BOM soit inclus pour les deux derniers codecs. La réponse à laquelle vous liez suppose que l'UTF-8 a été utilisé, ce qui est généralement correct car c'est la valeur par défaut. Depuis Python 3.6, lajson
bibliothèque décode automatiquement les bytecodes avec des données JSON à condition qu'un encodage UTF soit utilisé.requests
bibliothèque, qui détecte également automatiquement le codec UTF correct à utiliser dans les cas où la nomenclature est manquante et aucun jeu de caractères n'a été spécifié dans l'en-tête de la réponse. Utilisez simplement laresponse.json()
méthode.urllib , pour Python 3.4
HTTPMessage , renvoyé par r.info ()
la source
print data
incorrect pour Python 3. Devrait l'êtreprint(data)
.import urllib.request
. De plus, ce fichier .json dans l'URL n'existe plus.la source
from django.http import JsonResponse return JsonResponse({'key':'value'})
Faites attention à la validation, etc., mais la solution directe est la suivante:
la source
la source
Bibliothèque standard Python 3 one-liner:
la source
Bien que je suppose que cela a déjà répondu, je voudrais ajouter mon petit peu à ceci
Remarque: l'objet passé à json.load () doit prendre en charge .read () , donc urllib2.urlopen (self.name) .read () ne fonctionnerait pas. Doamin passé doit être fourni avec le protocole dans ce cas http
la source
vous pouvez également obtenir json en utilisant
requests
comme ci-dessous:la source
Ceci est une autre solution plus simple à votre question
où data est la sortie str du code suivant
la source
Aucun des exemples fournis ici n'a fonctionné pour moi. Ils étaient soit pour Python 2 (uurllib2), soit ceux pour Python 3 retournent l'erreur "ImportError: No module named request". Je recherche le message d'erreur sur Google et il m'oblige apparemment à installer un module - ce qui est évidemment inacceptable pour une tâche aussi simple.
Ce code a fonctionné pour moi:
la source
urllib.urlopen
;urlopen
est dans leurllib.request
module.