Python urllib2:从url接收JSON响应

时间:2012-12-17 20:46:07

标签: python json urllib2

我正在尝试使用Python获取URL,响应是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。

10 个答案:

答案 0 :(得分:177)

如果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

答案 1 :(得分:35)

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()

返回

答案 2 :(得分:4)

小心验证等,但直接的解决方案是:

import json
the_dict = json.load(response)

答案 3 :(得分:3)

"""
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")

答案 4 :(得分:2)

resource_url = 'http://localhost:8080/service/'
response = json.loads(urllib2.urlopen(resource_url).read())

答案 5 :(得分:1)

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'

答案 6 :(得分:0)

虽然我猜它已经回答了我想补充一下这个

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

答案 7 :(得分:0)

您还可以使用requests来获取json,如下所示:

import requests

r = requests.get('http://yoursite.com/your-json-pfile.json')
json_response = r.json()

答案 8 :(得分:0)

这是您问题的另一个更简单的解决方案

pd.read_json(data)

其中数据是以下代码的str输出

response = urlopen("https://data.nasa.gov/resource/y77d-th95.json")
json_data = response.read().decode('utf-8', 'replace')

答案 9 :(得分:-1)

这里提供的示例都没有为我工作。它们要么是Python 2(uurllib2),要么是Python 3返回错误" ImportError:没有名为request的模块"。我谷歌的错误信息,它显然需要我安装一个模块 - 这对于这样一个简单的任务显然是不可接受的。

此代码对我有用:

import json,urllib
data = urllib.urlopen("https://api.github.com/users?since=0").read()
d = json.loads(data)
print (d)