第3章 API数据获取
理论4课时 + 上机4课时 | 难度:中等
3.1 什么是API
API(Application Programming Interface,应用程序编程接口)就是网站或服务商提供的一个"数据窗口"。打个比方:你去餐厅吃饭,菜单就是API接口文档,你点菜(发送请求)后,厨房(服务器)做好菜(数据)端给你(返回响应)。API让程序之间可以互相传递数据,比直接爬网页更规范、更稳定。
3.2 JSON数据格式
JSON是API返回数据最常用的格式,长得像Python的字典。特点是:键值对形式、轻量易读、跨语言通用。
# JSON示例
{
"city": "广州",
"temperature": 28,
"weather": "晴",
"forecast": [
{"date": "周一", "temp": 29},
{"date": "周二", "temp": 27}
]
}
3.3 调用API的基本步骤
import requests
import json
# 第1步:找到API地址和参数
url = 'https://api.example.com/weather'
params = {
'city': '广州',
'appkey': '你的密钥' # 很多API需要密钥
}
# 第2步:发送请求
response = requests.get(url, params=params)
# 第3步:解析JSON数据
data = response.json()
# 第4步:提取需要的字段
city = data['city']
temp = data['temperature']
print(f'{city}当前温度:{temp}℃')
3.4 API认证方式
API Key:在URL参数或请求头中附带一个密钥字符串。 Token:先登录获取token,后续请求在Header中带上token。 OAuth 2.0:第三方授权,比如用微信/QQ登录其他网站。
# 在Header中传递API Key
headers = {
'Authorization': 'Bearer your_api_key_here'
}
response = requests.get(url, headers=headers)
# 在URL参数中传递
response = requests.get(url, params={'apikey': 'your_key'})
3.5 处理分页数据
很多API一次不会返回全部数据,而是分多页返回。需要循环请求每一页。
all_data = []
for page in range(1, 11): # 请求前10页
params = {
"page": page,
"pageSize": 20
}
response = requests.get(url, params=params)
data = response.json()
all_data.extend(data['list'])
# 友好一点,每次请求间隔1秒
import time
time.sleep(1)
print(f"共获取{len(all_data)}条数据")
3.6 保存API数据到CSV
import pandas as pd
# 假设data_list是从API获取的数据列表
df = pd.DataFrame(data_list)
df.to_csv('api_data.csv', index=False, encoding='utf-8-sig')
print('数据已保存到api_data.csv')
自学拓展素材
- 免费API练习:聚合数据(www.juhe.cn)提供免费试用API(天气、新闻等)
- 免费API练习:和风天气开发平台(dev.qweather.com)
- 工具:Postman(API调试工具,免费版够用)
- 阅读材料:RESTful API设计指南(理解URL设计规范)
- 实训数据集:使用免费天气API获取一周天气数据作为练习
自学自检小问题
- API和直接爬网页有什么区别?各有什么优缺点?
- JSON数据和Python字典有什么相似和不同之处?
- 调用API时常见的认证方式有哪几种?
- 为什么获取分页数据时要在循环里加time.sleep()?
- 如果API返回的数据是嵌套的多层JSON,你应该怎么提取深层字段?
基础巩固层练习
0/5
第1题
选择题
API返回的数据格式最常见的是?
答案解析
JSON是API返回数据最常用的格式,轻量易读、跨语言通用。
第2题
选择题
调用API时,time.sleep()的作用是?
答案解析
time.sleep()用于在请求之间添加延时,防止请求过快导致被封IP。
第3题
判断题
API的认证方式中,OAuth 2.0是一种第三方授权机制。
答案解析
OAuth 2.0确实是第三方授权机制,比如用微信/QQ登录其他网站就是使用OAuth 2.0。
第4题
填空题
JSON数据格式中,键和值之间用______分隔,键值对之间用______分隔。
答案解析
JSON使用冒号分隔键和值,使用逗号分隔不同的键值对。
第5题
选择题
response.json()的作用是?
答案解析
response.json()将JSON格式的响应内容自动解析为Python的字典或列表对象。
0/0