Я пытаюсь ПОЛУЧИТЬ 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.
response.read()
возвращать допустимую строку JSON?Ответы:
Если 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
источник
response
дает вам строки байтов иjson.load()
ожидает чтения цепочки байтов. JSON должен быть закодирован с использованием кодека UTF, и вышеприведенное работает для UTF-8, UTF-16 и UTF-32, при условии, что кодовая точка спецификации включена для последних двух кодеков. Ответ, на который вы ссылаетесь, предполагает, что использовался UTF-8, что обычно правильно, потому что это значение по умолчанию. Начиная с Python 3.6,json
библиотека автоматически декодирует байт-коды с данными JSON при условии, что используется кодировка UTF.requests
библиотеку, которая также автоматически определяет правильный кодек UTF для использования в тех случаях, когда спецификация отсутствует и в заголовке ответа не указан набор символов. Просто воспользуйтесьresponse.json()
методом.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 , для Python 3.4
HTTPMessage , возвращается r.info ()
источник
print data
неправильного для Python 3. Должен бытьprint(data)
.import urllib.request
. Кроме того, этот файл .json в URL-адресе больше не существует.""" 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")
источник
from django.http import JsonResponse return JsonResponse({'key':'value'})
Будьте осторожны с проверкой и т. Д., Но прямое решение таково:
import json the_dict = json.load(response)
источник
resource_url = 'http://localhost:8080/service/' response = json.loads(urllib2.urlopen(resource_url).read())
источник
Стандартная библиотека Python 3 однострочная:
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'
источник
Хотя я думаю, что он уже ответил, я хотел бы добавить немного в этом
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.load (), должен поддерживать .read () , поэтому urllib2.urlopen (self.name) .read () не будет работать. Переданный Доамин должен быть предоставлен протоколом в этом случае http
источник
вы также можете получить json, используя,
requests
как показано ниже:import requests r = requests.get('http://yoursite.com/your-json-pfile.json') json_response = r.json()
источник
Это еще одно более простое решение вашего вопроса
где данные - это вывод str из следующего кода
response = urlopen("https://data.nasa.gov/resource/y77d-th95.json") json_data = response.read().decode('utf-8', 'replace')
источник
Ни один из приведенных здесь примеров не работал у меня. Они были либо для Python 2 (uurllib2), либо для Python 3, возвращали ошибку «ImportError: No module named request». Я гуглил сообщение об ошибке, и, по-видимому, мне нужно было установить модуль, что явно неприемлемо для такой простой задачи.
Этот код работал у меня:
import json,urllib data = urllib.urlopen("https://api.github.com/users?since=0").read() d = json.loads(data) print (d)
источник
urllib.urlopen
;urlopen
находится вurllib.request
модуле.