В Python urllib2: получите ответ JSON от URL-адреса
Я пытаюсь получить URL-адрес с помощью Python и ответ JSON. Однако, когда я бегу
import urllib2
response = urllib2.urlopen('https://api.instagram.com/v1/tags/pizza/media/XXXXXX')
html=response.read()
print html
html имеет тип str, и я ожидаю JSON. Есть ли способ, которым я могу захватить ответ как JSON или словарь python вместо str.
7 ответов:
Если URL возвращает допустимые данные в кодировке JSON, используйте
jsonбиблиотека расшифровать, что: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 dataurllib, для Python 3.4
HTTPMessage, возвращенный мимо r.info ()
будьте осторожны с проверкой и т. д., Но прямое решение таково:
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 2 (uurllib2), либо для Python 3 возвращают ошибку "ImportError: no module named request". Я google сообщение об ошибке, и это, по - видимому, требует от меня установить модуль-что, очевидно, неприемлемо для такой простой задачи.
этот код работал для меня:
import json,urllib data = urllib.urlopen("https://api.github.com/users?since=0").read() d = json.loads(data) print (d)
хотя я думаю, что он уже ответил, я хотел бы добавить свой немного в этом
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()Примечание : объект передан json.нагрузки() следует поддерживать .читать (), поэтому urllib2. urlopen(self.name). read () не будет работать . Doamin прошел должен быть обеспечен протоколом в этом случае http
Comments