首页 / 数据采集与处理 / 第3章 API数据获取

第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获取一周天气数据作为练习

自学自检小问题

  1. API和直接爬网页有什么区别?各有什么优缺点?
  2. JSON数据和Python字典有什么相似和不同之处?
  3. 调用API时常见的认证方式有哪几种?
  4. 为什么获取分页数据时要在循环里加time.sleep()?
  5. 如果API返回的数据是嵌套的多层JSON,你应该怎么提取深层字段?
基础巩固层练习
0/5
第1题 选择题
API返回的数据格式最常见的是?
XML
HTML
JSON
CSV
答案解析
JSON是API返回数据最常用的格式,轻量易读、跨语言通用。
第2题 选择题
调用API时,time.sleep()的作用是?
加速请求
防止请求过快被封IP
加密数据
解析JSON
答案解析
time.sleep()用于在请求之间添加延时,防止请求过快导致被封IP。
第3题 判断题
API的认证方式中,OAuth 2.0是一种第三方授权机制。
正确
错误
答案解析
OAuth 2.0确实是第三方授权机制,比如用微信/QQ登录其他网站就是使用OAuth 2.0。
第4题 填空题
JSON数据格式中,键和值之间用______分隔,键值对之间用______分隔。
答案解析
JSON使用冒号分隔键和值,使用逗号分隔不同的键值对。
第5题 选择题
response.json()的作用是?
获取响应文本
将响应内容解析为Python字典
获取响应头
获取状态码
答案解析
response.json()将JSON格式的响应内容自动解析为Python的字典或列表对象。
0/0