# 2025-2026-2 《Python程序设计》实验四报告
2025-2026-2 《Python程序设计》实验四报告
课程:《Python程序设计》
班级:2524
姓名:代林淞
学号:20252428
实验教师:王志强
实验日期:2026年5月18日
必修/选修:公选课
1. 实验内容
Python综合应用:爬虫、数据处理、可视化、机器学习、神经网络、游戏、网络安全等。
本次实验选择爬取天气数据,实现自动化企业微信定时消息提醒。通过调用免费公开天气与空气质量API,获取真实实时气象信息,使用Python进行数据解析与处理,结合定时任务实现每日早上7点自动运行,最终通过企业微信机器人Webhook接口推送天气提醒,综合运用网络请求、JSON解析、定时任务、第三方接口调用等技术,完成Python综合应用实践。
开发工具使用PyCharm,运行环境为Windows系统。
2. 实验过程及结果
实验准备:安装requests第三方库,选取wttr.in天气API与Open-Meteo空气质量API(Github地址: Open-Meteo),无需申请密钥即可获取数据,配置企业微信群机器人Webhook推送地址。
编写爬虫代码:调用天气与空气质量接口,发送网络请求,获取实时天气、今日最高温、最低温、体感温度、湿度、风速、AQI空气质量等信息。
数据处理:解析返回的JSON格式数据,提取关键气象信息,对AQI数值划分优、良、轻度污染等等级,根据温度、降雨、空气质量自动生成出行温馨提示。
消息推送:将整理后的天气信息格式化,调用企业微信Webhook接口,以POST方式发送文本消息。
定时功能:采用时间轮询方式实现定时,先设置1分钟延迟测试推送功能,调试无误后修改为每日早上7点自动执行。
程序调试:解决接口字段缺失、网络连接异常、变量匹配等问题,完善异常捕获,保证程序稳定运行。
实验结果:程序可无人值守自动运行,每日7点准时爬取真实天气数据并推送到企业微信,信息完整、推送稳定,完成全部实验功能。
完整源代码

import requests
import time
from datetime import datetime
# 企业微信机器人Webhook地址
webhook_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=d10e9c81-8456-49ee-bc45-2c0f02c74290"
def get_weather():
try:
# 获取天气信息
url = "https://wttr.in/Beijing?format=j1"
response = requests.get(url, timeout=10)
data = response.json()
current = data["current_condition"][0]
temp = current["temp_C"]
feelslike = current["FeelsLikeC"]
sky = current["weatherDesc"][0]["value"]
wind = current["windspeedKmph"]
humidity = current["humidity"]
weather = data["weather"][0]
temp_min = weather["mintempC"]
temp_max = weather["maxtempC"]
# 获取AQI空气质量
aqi_url = "https://air-quality-api.open-meteo.com/v1/air-quality?latitude=39.9042&longitude=116.4074¤t=european_aqi"
aqi_data = requests.get(aqi_url, timeout=10).json()
aqi = int(aqi_data["current"]["european_aqi"])
# AQI等级判断
if aqi <= 50:
aqi_level = "优"
elif aqi <= 100:
aqi_level = "良"
elif aqi <= 150:
aqi_level = "轻度污染"
elif aqi <= 200:
aqi_level = "中度污染"
else:
aqi_level = "重度污染"
# 出行温馨提示
tip_list = []
if int(temp_min) < 10:
tip_list.append("⚠️早晚偏凉,注意添衣")
if int(temp_max) > 28:
tip_list.append("⚠️白天炎热,做好防晒")
if "雨" in sky:
tip_list.append("⚠️今日有雨,出门带伞")
if aqi > 100:
tip_list.append("⚠️空气质量一般,减少剧烈运动")
if not tip_list:
tip_list.append("☀️天气舒适,出行愉快")
tip = " ".join(tip_list)
msg = f"""
【每日7点早安·天气自动提醒】
🌤️ 今日天气:{sky}
🌡️ 当前温度:{temp}℃|体感温度:{feelslike}℃
🌡️ 今日温度范围:{temp_min}℃ ~ {temp_max}℃
💨 风速:{wind} km/h
💧 空气湿度:{humidity}%
🌫️ 空气质量:{aqi_level}(AQI:{aqi})
💡 温馨提示:{tip}
⏰ 推送时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
"""
return msg
except Exception as e:
return f"【天气推送异常】\n错误信息:{e}\n{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
def send_work_wechat():
message = get_weather()
payload = {"msgtype":"text","text":{"content":message}}
requests.post(webhook_url, json=payload)
print(f"✅ {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} 已推送今日天气")
def timing_task():
print("程序已启动,等待每日早上7点自动推送...")
while True:
now = datetime.now()
# 每天7:00准时推送
if now.hour == 7 and now.minute == 0:
send_work_wechat()
time.sleep(60) # 防止重复发送
time.sleep(30)
if __name__ == "__main__":
timing_task()
3. 实验过程中遇到的问题和解决过程
问题 1
调用天气 API 时,返回 JSON 字段名称不固定,频繁出现KeyError键缺失报错,无法正常读取空气质量、天气信息。

解决方案:更换稳定免费公开 API,拆分天气与空气质量两个接口分别请求,统一数据字段格式,增加异常捕获语句,避免接口波动导致程序崩溃。
问题 2
定时任务逻辑不完善,仅严格 7:00:00 才执行,若程序启动晚 1 秒则当天不推送,测试不方便。

解决方案:测试阶段修改为延迟 60 秒立即推送,正式版采用轮询判断小时与分钟,只要到达 7 点区间就执行一次推送,同时设置休眠避免重复发送。
问题 3
企业微信推送格式混乱、换行异常,消息排版不美观。
解决方案:使用 f‑string 规范文本格式,统一换行符,增加表情符号优化阅读体验,调试接口确保文本正常发送。
4. 实验感悟
本次综合实验让我熟练掌握了 Python 网络请求、JSON 数据解析、接口调用、定时任务设计等实用技能。天气推送项目贴近生活,将爬虫、数据处理、自动化推送结合在一起,让我理解了 Python 在自动化办公、日常提醒中的实际应用价值。
实验过程中遇到接口不稳定、字段报错、定时逻辑错误等问题,通过查阅资料、调试代码、分步测试逐一解决,提升了自己的排错能力和代码规范意识。同时认识到第三方接口存在不稳定性,编写程序时需要做好异常处理,保证程序健壮性。
通过本次实验,我对 Python 综合应用有了更全面的认识,今后可以拓展实现多城市天气推送、添加降水概率、紫外线等更多气象指标,进一步完善自动化项目。
全课总结:
通过这次Python课程,我深刻感受到Python语言相较于C++的简洁与强大。课程帮助我系统地掌握了编程基础概念和知识,学会了很多Python内置函数以及第三方库的用法。同时,我们也接触了socket编程和爬虫这类实践性很强的技术,让我真正体会到用Python解决实际问题的能力。
更重要的是,我意识到写代码不能只追求功能实现,还需要具备严谨的计算机思维,提前考虑各种意外情况,比如数据溢出、死循环、输入异常等。同时,我也规范了命名风格,学会了如何有效调试代码,掌握了从零开始组织一个项目代码的正确流程。此外,我还了解了Gitee/GitHub这类代码托管平台,并学会了如何创建和使用自己的库。
课程感想:
老师的讲解简单明了,每节课都能让我实实在在地学到新东西。我非常喜欢上老师的Python课,课程内容既有基础又有实战,收获满满。不愧是dky第一难抢的课,能选上真的太值了!

浙公网安备 33010602011771号