簡體   English   中英

Python從URL讀取JSON

[英]Python read json from url

使用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

對我來說,以下代碼在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}]}

twitter正在返回400代碼(錯誤請求),因此引發了異常。 您可以在代碼示例中使用try ... except並讀取異常主體以獲取響應json {“錯誤”:[{“代碼”:215,“消息”:“錯誤的身份驗證數據。”}]}

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

我更喜歡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())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM