Ich versuche, eine URL mit Python zu erhalten, und die Antwort ist JSON. Allerdings wenn ich 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 eine JSON. Gibt es eine Möglichkeit, die Antwort als JSON oder als Python-Wörterbuch anstelle eines Strings zu erfassen.
Wenn die URL gültige JSON-codierte Daten zurückgibt, verwenden Sie die Bibliothek json
, um diese zu decodieren:
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 , für Python 3.4
HTTPMessage , zurückgegeben von r.info ()
Seien Sie vorsichtig bei der Validierung usw., aber die direkte Lösung lautet:
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-Standardbibliothek einzeilig:
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'
Obwohl ich denke, dass es bereits geantwortet hat, möchte ich hier etwas hinzufügen
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()
Hinweis: Das Objekt, das an json.load () übergeben wird, sollte .read () unterstützen, daher urllib2.urlopen (self.name) .read () würde nicht funktionieren bestanden sollte in diesem Fall mit Protokoll versehen werden http
sie können JSON auch erhalten, indem Sie requests
wie folgt verwenden:
import requests
r = requests.get('http://yoursite.com/your-json-pfile.json')
json_response = r.json()
Dies ist eine weitere einfachere Lösung für Ihre Frage
pd.read_json(data)
dabei sind Daten die Zeichenfolge, die aus dem folgenden Code ausgegeben wird
response = urlopen("https://data.nasa.gov/resource/y77d-th95.json")
json_data = response.read().decode('utf-8', 'replace')