9.7 KiB
9.7 KiB
天气数据自动采集与推送系统——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<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>逐行解释: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模块已具备项目集成的条件,教学目标达成度较高。 |