В 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.

638   7  

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 data

urllib, для 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

    Ничего не найдено.