first commit
This commit is contained in:
50
data/Python/8.md
Normal file
50
data/Python/8.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# 天气数据自动采集与推送系统——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模块已具备项目集成的条件,教学目标达成度较高。 |
|
||||
Reference in New Issue
Block a user