Python从url读取json

时间:2015-12-01 06:48:24

标签: python json

使用Python 3,我想从url读取JSON。 这就是我得到的:

import json
import urllib.request
url_address = 'https://api.twitter.com/1.1/statuses/user_timeline.json'
with urllib.request.urlopen(url_address) as url:
    data = json.loads(url.read())
print(data)

然而,它提供:HTTPError: HTTP Error 400: Bad Request

3 个答案:

答案 0 :(得分:1)

对我来说,下面的代码正在使用Python 2.7

import json
from urllib import urlopen
url_address = ['https://api.twitter.com/1.1/statuses/user_timeline.json']
for i in url_address:
    resp = urlopen(i)
    data = json.loads(resp.read())
print(data)

输出 -

{u'errors': [{u'message': u'Bad Authentication data.', u'code': 215}]}

如果您使用requests模块 -

import requests
url_address = ['https://api.twitter.com/1.1/statuses/user_timeline.json']
for i in url_address:
    resp = requests.get(i).json()
    print resp

输出 -

{u'errors': [{u'message': u'Bad Authentication data.', u'code': 215}]}

答案 1 :(得分:1)

twitter正在返回400个代码(错误请求),因此异常会被触发。 你可以使用try ...除了你的代码示例和读取异常体以获得响应json {“errors”:[{“code”:215,“message”:“Bad Authentication data。”}}}

import json
import urllib.request
from urllib.error import HTTPError


try:

    url_address ='https://api.twitter.com/1.1/statuses/user_timeline.json'
    with urllib.request.urlopen(url_address) as url:
        data = json.loads(url.read())
        print(data)

except HTTPError as ex:
    print(ex.read())

答案 2 :(得分:0)

我更喜欢aiohttp,它是异步的。上次我查看时,urllib正在阻止。这意味着它将阻止脚本的其他部分在其自身运行时运行。以下是aiohttp的示例:

import aiohttp
async with aiohttp.ClientSession() as session:
async with session.get('https://api.github.com/users/mralexgray/repos') as resp:

    print(await resp.json())