[英]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.