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.
Ответы
Ответ 1
Если URL-адрес возвращает действительные данные в формате JSON, используйте json
library, чтобы декодировать это:
import urllib2
import json
response = urllib2.urlopen('https://api.instagram.com/v1/tags/pizza/media/XXXXXX')
data = json.load(response)
print data
Ответ 2
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()
Ответ 3
Будьте осторожны с проверкой и т.д., но прямое решение таково:
import json
the_dict = json.load(response)
Ответ 4
"""
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")
Ответ 5
resource_url = 'http://localhost:8080/service/'
response = json.loads(urllib2.urlopen(resource_url).read())
Ответ 6
Стандартная библиотека 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'
Ответ 7
Хотя я догадываюсь, что уже ответил, я хотел бы добавить свой маленький бит в этот
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() не будет работать.
Провод Doamin должен быть обеспечен протоколом в этом случае http
Ответ 8
Вы также можете получить JSON, используя requests
, как показано ниже:
import requests
r = requests.get('http://yoursite.com/your-json-pfile.json')
json_response = r.json()
Ответ 9
Это еще одно более простое решение для вашего вопроса
pd.read_json(data)
где данные - это выходные данные из следующего кода
response = urlopen("https://data.nasa.gov/resource/y77d-th95.json")
json_data = response.read().decode('utf-8', 'replace')
Ответ 10
Ни один из приведенных здесь примеров не работал у меня. Они были либо для 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)