Files
teaching-design/data/Python/14.md
2026-06-15 00:55:47 -06:00

50 lines
9.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 天气数据自动采集与推送系统——HTTP通信与天气API数据获取 教学设计
| **课题** | **天气数据自动采集与推送系统——HTTP通信与天气API数据获取** |
|---------|------------------------------------------|
| **课时** | 1课时(40分钟) |
| **教学目标** | **知识目标**理解HTTP协议的请求-响应模式掌握REST API的基本概念与调用方式,了解JSON数据格式的结构特点。<br>**技能目标**能够使用requests库发送GET请求调用天气API能够解析API返回的JSON数据并提取关键字段城市、温度、天气状况能够编写完整的天气数据获取脚本作为项目的数据采集模块。<br>**素养目标**:建立"服务调用"的现代编程思维培养阅读API文档的自学能力养成在项目开发中合理使用第三方服务的工程意识。 |
| **教学重难点** | **重点**requests库的安装与基本使用方法API请求URL的构造与参数传递JSON数据的解析与字段提取。<br>**难点**理解HTTP请求的本质与API文档中参数的对应关系处理API响应中的嵌套JSON结构应对API请求失败的异常情况。 |
| **教学资源准备** | 多媒体课件含HTTP通信原理动画和风天气API密钥或其他免费天气API示例API响应JSON数据requests库安装包项目代码模板文件。 |
## 教学过程
| 教学环节 | 教学内容 | 教师活动 | 学生活动 | 设计意图 |
|:---------|:---------|:---------|:---------|:---------|
| **1. 项目任务导入**<br>(7分钟) | 展示项目最终目标(自动采集多城市天气并推送),明确本课时任务是实现项目的核心模块——数据采集功能,引出"如何让Python程序从互联网获取天气数据"这一技术问题。 | **场景创设**<br>演示手机天气APP的实时更新效果提问"这些数据从哪来我们的Python程序如何获取"<br><br>**任务发布**<br>展示项目架构图标注本课时目标编写weather_fetcher.py模块实现"输入城市名→返回温度、天气"功能。 | **观察思考**<br>观看演示,联系日常使用经验,思考数据来源;<br><br>**明确目标**<br>理解本课时在项目中的定位:数据采集是后续所有功能的基础。 | 通过真实应用场景建立技术需求认知;通过项目架构图让学生明确本课时任务在整体中的关键作用,强化目标导向。 |
| **2. 核心概念讲解**<br>(8分钟) | 讲解HTTP协议的客户端-服务器模型介绍REST API的概念、特点与调用方式展示天气API文档的关键内容接口地址、参数、响应格式。 | **原理阐述**<br>用动画演示HTTP请求过程Python程序客户端→发送请求→服务器→返回数据强调"URL+参数"的请求构造方式;<br><br>**文档解读**<br>打开和风天气API文档逐项讲解接口URL、必需参数key、location、响应JSON结构演示在浏览器中直接访问API。 | **聆听理解**<br>理解HTTP的"请求-响应"机制记录API调用的三要素地址、参数、响应格式<br><br>**实例观察**<br>观看浏览器访问API的演示直观感受JSON数据的返回尝试识别数据中的城市、温度字段。 | 将抽象的网络通信概念具象为"发送网址+参数,获得数据"的简单模型;通过浏览器演示消除技术神秘感,建立"API就是特殊网址"的认知。 |
| **3. 工具库与代码演示**<br>(10分钟) | 介绍requests库的作用与安装演示使用requests.get()调用天气API的完整代码讲解参数传递、响应处理、JSON解析的具体方法。 | **库的引入**<br>说明requests是Python的HTTP客户端库演示pip install requests安装过程<br><br>**代码演示**<br>边讲解边编写代码:<br>```python<br>import requests<br>url = "https://api.qweather.com/v7/weather/now"<br>params = {"key": "你的密钥", "location": "101010100"}<br>response = requests.get(url, params=params)<br>data = response.json()<br>print(f"温度:{data['now']['temp']}℃")<br>```<br>逐行解释URL定义、参数字典、发送请求、解析JSON、字段访问<br><br>**运行展示**<br>运行代码,展示获取到的北京天气数据。 | **安装实践**<br>跟随教师完成requests库的安装确认<br><br>**代码跟随**<br>边听边在自己的IDE中输入代码理解每行的作用<br><br>**结果验证**<br>运行代码观察控制台输出的天气数据对照API文档验证字段。 | 通过完整代码演示建立"库调用-参数传递-数据解析"的操作流程;通过逐行讲解降低理解难度;通过即时运行验证建立"代码有效"的信心。 |
| **4. 功能模块编写**<br>(12分钟) | 指导学生编写完整的天气数据获取函数,封装为项目模块,要求实现:输入城市名、返回温度和天气状况、添加异常处理、输出格式化结果。 | **任务细化**<br>发布编码任务创建weather_fetcher.py定义get_weather(city)函数,实现上述功能;提供城市代码对照表;<br><br>**技术提示**<br>提示关键点使用字典存储多城市代码、用try-except捕获网络异常、格式化输出使用f-string<br><br>**巡回指导**<br>巡视学生编码解答JSON嵌套访问、异常处理等问题强调代码注释与函数文档字符串的编写。 | **独立编码**<br>创建py文件定义函数框架填充请求逻辑<br><br>**调试测试**<br>测试不同城市(如"北京""上海"),验证数据准确性;尝试故意输入错误密钥,观察异常处理效果;<br><br>**代码优化**<br>根据测试结果调整代码,添加注释说明各部分功能。 | 通过独立编码巩固API调用技能形成可复用的项目模块通过测试培养"编码-调试-优化"的开发习惯;通过异常处理强化代码健壮性意识。 |
| **5. 成果展示与项目展望**<br>(3分钟) | 选取学生作品展示运行效果总结HTTP通信与API调用的核心要点预告后续课程将在此基础上实现多城市并发采集与数据存储。 | **作品点评**<br>选2-3名学生演示代码点评优点如良好的异常处理与改进点<br><br>**知识串联**<br>总结:本课时完成了项目的"数据源"模块,后续将学习用多线程同时采集多城市、用数据库存储历史数据、用定时任务实现自动化;<br><br>**任务布置**<br>课后任务:为函数添加"获取未来3天天气"的功能需查阅API文档。 | **观摩学习**<br>观看同学作品,学习不同实现思路;<br><br>**总结反思**<br>回顾requests使用流程明确本模块在项目中的"基石"作用;<br><br>**接收任务**<br>记录课后任务理解这是对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模块已具备项目集成的条件教学目标达成度较高。 |