J'essaie 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 code HTML est de type str et j'attends un JSON. Est-il possible de capturer la réponse sous forme de JSON ou d'un dictionnaire python au lieu d'un str.
Si l'URL renvoie des données valides codées JSON, utilisez la bibliothèque json
pour décoder cela:
import urllib2
import json
response = urllib2.urlopen('https://api.instagram.com/v1/tags/pizza/media/XXXXXX')
data = json.load(response)
print data
import json
import urllib
url = 'http://example.com/file.json'
r = urllib.request.urlopen(url)
data = json.loads(r.read().decode(r.info().get_param('charset') or 'utf-8'))
print(data)
urllib , pour Python 3.4
HTTPMessage , renvoyé par r.info ()
Faites attention à la validation, etc., mais la solution simple est la suivante:
import json
the_dict = json.load(response)
"""
Return JSON to webpage
Adding to wonderful answer by @Sanal
For Django 3.4
Adding a working url that returns a json (Source: http://www.jsontest.com/#echo)
"""
import json
import urllib
url = 'http://echo.jsontest.com/insert-key-here/insert-value-here/key/value'
respons = urllib.request.urlopen(url)
data = json.loads(respons.read().decode(respons.info().get_param('charset') or 'utf-8'))
return HttpResponse(json.dumps(data), content_type="application/json")
resource_url = 'http://localhost:8080/service/'
response = json.loads(urllib2.urlopen(resource_url).read())
Python 3 bibliothèque standard one-liner:
load(urlopen(url))
# imports (place these above the code before running it)
from json import load
from urllib.request import urlopen
url = 'https://jsonplaceholder.typicode.com/todos/1'
Bien que j'imagine que cela a déjà été répondu, j'aimerais ajouter mon petit mot à cette question.
import json
import urllib2
class Website(object):
def __init__(self,name):
self.name = name
def dump(self):
self.data= urllib2.urlopen(self.name)
return self.data
def convJSON(self):
data= json.load(self.dump())
print data
domain = Website("https://example.com")
domain.convJSON()
Remarque: un objet passé à json.load () devrait supporter .read () , donc urllib2.urlopen (self.name) .read () ne fonctionnerait pas . Doamin passé doit être fourni avec le protocole dans ce cas http
vous pouvez également obtenir JSON en utilisant requests
comme ci-dessous:
import requests
r = requests.get('http://yoursite.com/your-json-pfile.json')
json_response = r.json()
Ceci est une autre solution plus simple à votre question
pd.read_json(data)
où data est la sortie de str du code suivant
response = urlopen("https://data.nasa.gov/resource/y77d-th95.json")
json_data = response.read().decode('utf-8', 'replace')