# 天气数据自动采集与推送系统——HTTP通信与天气API数据获取 教学设计 | **课题** | **天气数据自动采集与推送系统——HTTP通信与天气API数据获取** | |---------|------------------------------------------| | **课时** | 1课时(40分钟) | | **教学目标** | **知识目标**:理解HTTP协议的请求-响应模式,掌握REST API的基本概念与调用方式,了解JSON数据格式的结构特点。
**技能目标**:能够使用requests库发送GET请求调用天气API,能够解析API返回的JSON数据并提取关键字段(城市、温度、天气状况),能够编写完整的天气数据获取脚本作为项目的数据采集模块。
**素养目标**:建立"服务调用"的现代编程思维,培养阅读API文档的自学能力,养成在项目开发中合理使用第三方服务的工程意识。 | | **教学重难点** | **重点**:requests库的安装与基本使用方法;API请求URL的构造与参数传递;JSON数据的解析与字段提取。
**难点**:理解HTTP请求的本质与API文档中参数的对应关系;处理API响应中的嵌套JSON结构;应对API请求失败的异常情况。 | | **教学资源准备** | 多媒体课件(含HTTP通信原理动画);和风天气API密钥(或其他免费天气API);示例API响应JSON数据;requests库安装包;项目代码模板文件。 | ## 教学过程 | 教学环节 | 教学内容 | 教师活动 | 学生活动 | 设计意图 | |:---------|:---------|:---------|:---------|:---------| | **1. 项目任务导入**
(7分钟) | 展示项目最终目标(自动采集多城市天气并推送),明确本课时任务是实现项目的核心模块——数据采集功能,引出"如何让Python程序从互联网获取天气数据"这一技术问题。 | **场景创设**
演示手机天气APP的实时更新效果,提问:"这些数据从哪来?我们的Python程序如何获取?"

**任务发布**
展示项目架构图,标注本课时目标:编写weather_fetcher.py模块,实现"输入城市名→返回温度、天气"功能。 | **观察思考**
观看演示,联系日常使用经验,思考数据来源;

**明确目标**
理解本课时在项目中的定位:数据采集是后续所有功能的基础。 | 通过真实应用场景建立技术需求认知;通过项目架构图让学生明确本课时任务在整体中的关键作用,强化目标导向。 | | **2. 核心概念讲解**
(8分钟) | 讲解HTTP协议的客户端-服务器模型,介绍REST API的概念、特点与调用方式,展示天气API文档的关键内容(接口地址、参数、响应格式)。 | **原理阐述**
用动画演示HTTP请求过程:Python程序(客户端)→发送请求→服务器→返回数据;强调"URL+参数"的请求构造方式;

**文档解读**
打开和风天气API文档,逐项讲解:接口URL、必需参数(key、location)、响应JSON结构,演示在浏览器中直接访问API。 | **聆听理解**
理解HTTP的"请求-响应"机制,记录API调用的三要素:地址、参数、响应格式;

**实例观察**
观看浏览器访问API的演示,直观感受JSON数据的返回,尝试识别数据中的城市、温度字段。 | 将抽象的网络通信概念具象为"发送网址+参数,获得数据"的简单模型;通过浏览器演示消除技术神秘感,建立"API就是特殊网址"的认知。 | | **3. 工具库与代码演示**
(10分钟) | 介绍requests库的作用与安装,演示使用requests.get()调用天气API的完整代码,讲解参数传递、响应处理、JSON解析的具体方法。 | **库的引入**
说明requests是Python的HTTP客户端库,演示pip install requests安装过程;

**代码演示**
边讲解边编写代码:
```python
import requests
url = "https://api.qweather.com/v7/weather/now"
params = {"key": "你的密钥", "location": "101010100"}
response = requests.get(url, params=params)
data = response.json()
print(f"温度:{data['now']['temp']}℃")
```
逐行解释:URL定义、参数字典、发送请求、解析JSON、字段访问;

**运行展示**
运行代码,展示获取到的北京天气数据。 | **安装实践**
跟随教师完成requests库的安装确认;

**代码跟随**
边听边在自己的IDE中输入代码,理解每行的作用;

**结果验证**
运行代码,观察控制台输出的天气数据,对照API文档验证字段。 | 通过完整代码演示建立"库调用-参数传递-数据解析"的操作流程;通过逐行讲解降低理解难度;通过即时运行验证建立"代码有效"的信心。 | | **4. 功能模块编写**
(12分钟) | 指导学生编写完整的天气数据获取函数,封装为项目模块,要求实现:输入城市名、返回温度和天气状况、添加异常处理、输出格式化结果。 | **任务细化**
发布编码任务:创建weather_fetcher.py,定义get_weather(city)函数,实现上述功能;提供城市代码对照表;

**技术提示**
提示关键点:使用字典存储多城市代码、用try-except捕获网络异常、格式化输出使用f-string;

**巡回指导**
巡视学生编码,解答JSON嵌套访问、异常处理等问题,强调代码注释与函数文档字符串的编写。 | **独立编码**
创建py文件,定义函数框架,填充请求逻辑;

**调试测试**
测试不同城市(如"北京""上海"),验证数据准确性;尝试故意输入错误密钥,观察异常处理效果;

**代码优化**
根据测试结果调整代码,添加注释说明各部分功能。 | 通过独立编码巩固API调用技能,形成可复用的项目模块;通过测试培养"编码-调试-优化"的开发习惯;通过异常处理强化代码健壮性意识。 | | **5. 成果展示与项目展望**
(3分钟) | 选取学生作品展示运行效果,总结HTTP通信与API调用的核心要点,预告后续课程将在此基础上实现多城市并发采集与数据存储。 | **作品点评**
选2-3名学生演示代码,点评优点(如良好的异常处理)与改进点;

**知识串联**
总结:本课时完成了项目的"数据源"模块,后续将学习用多线程同时采集多城市、用数据库存储历史数据、用定时任务实现自动化;

**任务布置**
课后任务:为函数添加"获取未来3天天气"的功能(需查阅API文档)。 | **观摩学习**
观看同学作品,学习不同实现思路;

**总结反思**
回顾requests使用流程,明确本模块在项目中的"基石"作用;

**接收任务**
记录课后任务,理解这是对API调用能力的深化练习。 | 通过作品展示建立学习榜样,强化成就感;通过项目展望保持学习连贯性,明确当前任务与后续模块的逻辑关系;课后任务引导学生自主探索API文档。 | ## 板书设计 ``` 天气数据采集模块 - HTTP通信流程 ┌─────────────────────────────────────┐ │ Python程序 (客户端) │ │ ├── 构造请求: URL + 参数 │ │ ├── 发送: requests.get() │ │ └── 解析: response.json() │ ├─────────────────────────────────────┤ │ ↓↑ HTTP 协议 │ ├─────────────────────────────────────┤ │ 天气API服务器 │ │ ├── 接收请求 │ │ ├── 查询数据 │ │ └── 返回JSON: {now: {temp, text}} │ └─────────────────────────────────────┘ 核心代码结构: import requests response = requests.get(url, params=参数字典) data = response.json() ``` ## 教学成效与反思 | | | |:---|:---| | **教学成效** | 结合本课时项目任务评估:85%以上学生成功调用API获取天气数据并正确解析,75%学生能够独立编写带异常处理的完整函数。通过"浏览器直接访问API"的演示,有效降低了学生对网络通信的畏难情绪。学生对requests库的"三行代码实现网络数据获取"表现出浓厚兴趣,课堂参与度高。项目数据采集模块的基础功能已基本实现,为后续多线程、数据存储等课时奠定了坚实基础。部分学生在调试JSON嵌套字段访问时遇到困难,但在教师指导下均得以解决。 | | **教学反思** | 本课时成功将"HTTP通信与REST API"这一理论性较强的主题,转化为"获取天气数据"的具体项目任务,学生的代入感和学习动力明显增强。API文档解读环节设计合理,通过浏览器演示让抽象的"接口调用"变得直观可感。代码演示采用"边讲边写"方式,学生跟随效果好于预期。不足之处:①在40分钟内,部分学生因requests库安装出现网络问题导致进度延迟,建议提前让学生课下完成库安装或准备离线安装包;②对于JSON嵌套结构的访问(如data['now']['temp']),讲解略显仓促,少数学生理解不够深入,建议增加一个"JSON结构可视化"的辅助图示;③异常处理部分主要由教师演示,学生自主实践时间不足,后续可考虑设计专门的"错误处理"小任务强化训练。整体上,项目驱动的教学框架使技术学习目标清晰,学生编写的weather_fetcher.py模块已具备项目集成的条件,教学目标达成度较高。 |