0%

云云Python笔记

API数据获取

要获取API数据,首先我们需要导入requests标准库。这里我们直接使用import语句。

1
import requests #导入requests标准库

定义API地址

我们使用一个变量API_url来定义一个API地址字串,也可以通过输入字串的方式来定义API地址。

1
API_url = "https://api.exchangerate-api.com/v4/latest/USD" #硬编码API地址,适合长期不发生变化且执行频率高的API
1
API_url = input("Please input your API URL:") #提示用户输入API地址,适合地址变化灵活且执行频率相对较低的API

获取API数据

在这里,我们通过requests库的一个命令来获取API的原始返回数据,通常是json格式数据。但是由于网络请求可能存在不稳定性,所以我们使用一个try:,并编写对应的except异常处理来防止网络异常或API失效时我们的程序崩溃。

1
2
3
4
5
6
7
8
9
10
11
try: #使用try块确保出错时程序不崩溃
response = requests.get("https://api.exchangerate-api.com/v4/latest/USD", timeout=10) #使用requests的get方法获取API返回值来确保出错时程序不会崩溃,此方法将会返回一个对象,将对象赋值给变量response,可从此对象中取值
if response.status_code == 200: #取出刚刚赋值给response变量的对象中的状态码值(整数)
print("Successfull!")
print(f"response raw content:{response.content}") #取出刚刚赋值给response变量的对象中的API响应内容字节数量(整数)
print(f"原始数据预览:{response.text[:100]}...") #取出刚刚赋值给response变量的对象中的API响应内容(字串),其中方括号冒号一百代表取前一百位,这里只显示前一百位的原因是防止数据过多导致日志噪声过大
else
print(f"Failed! HTTP ERROR{response.status_code}") #出错时(此处将非200状态码均判出错)抛出HTTP错误码

except requests.exceptions.RequestException as e: #编写异常处理,网络出错时将会执行此except块
print(f"网络请求异常:{e}") #网络出错时抛出网络异常

解析JSON

这里,我们需要先导入json库才能实现解析功能。先把import语句加在文件头部,导入json标准库。

1
import json #导入json标准库

我们需要先审查原始json的结构才能进行进一步的数据分析代码编写。我们用json.dumps函数实现json美化,使其看上去有层次感,而不是全部挤在一起。这个函数一般用于开发阶段的json结构审查。

1
print(f"美化数据预览:{json.dumps(response.text,indent=2,ensure_ascii=False)}") #json.dumps用于美化json数据输出格式,其有三个参数,第一个参数是原始json数据,第二个参数表示子级数据缩进,第三个参数控制编码,若要显示中文则填写False

取值方法一:分层解析

我们使用多次json层级解析,一层层把json数据剥开,就像你想在一个洋葱(原始json数据)里面找出一个东西,你需要一层层的剥开洋葱,直到找到我们想要的东西(数据)并取值。

取值方法二:路径解析

我们直接使用json路径进行解析,就像你在一刀把洋葱砍成了两半,直接找到了洋葱里面你想要的东西。也可以理解为就像系统中找一个藏得很深的文件通常在命令行中只需要一条稍长一点的包含它所有父级文件夹名的路径一样。