1.立项背景和目标
随着气象数据在农业、交通、能源等领域的应用需求增加,传统手动获取天气信息效率低下且易出错。本项目旨在通过自动化技术实现对中国天气网指定城市 7 天天气预报数据的采集、处理和可视化,为用户提供直观、准确的天气分析报告,降低数据获取成本。
2.软件功能、核心功能模块的介绍
数据爬取模块:使用requests库模拟浏览器请求,爬取中国天气网指定城市的 7 天天气预报页面,并通过BeautifulSoup4解析 HTML,提取日期、天气状况、最高 / 最低温度等核心数据。
数据处理模块:清洗原始数据(如去除单位符号 “℃”),计算温差(最高温度 - 最低温度)和 7 天平均温度,确保数据准确性。
Excel 自动化模块:利用openpyxl创建 Excel 文件,结构化存储数据并生成温度趋势折线图(含最高 / 最低温两条曲线),自动设置数值格式、表头样式及文件标题。
3.业务流程、功能路径描述
数据爬取流程:
构造请求头(随机 User-Agent),发送 GET 请求至中国天气网目标页面。
检查响应状态,若成功则使用BeautifulSoup4解析 HTML 内容。
定位数据所在表格,遍历提取每行数据并存储为列表。
数据处理流程:
清洗温度数据,转换为数值类型。
计算温差和平均温度,扩展数据列表。
Excel 生成流程:
创建工作簿和工作表,写入表头及数据。
插入温差公式和平均温度计算函数,应用数值格式。
生成双折线图,设置图表标题、图例、网格线及数据点标注。
保存文件为 “天气报告.xlsx”。
1. 整体架构和设计思路
该项目采用模块化设计,整体分为"数据爬取层"和"Excel报告生成层",通过数据流转实现全流程自动化:
- **架构分层**:
- **数据爬取层**:负责从中国天气网获取原始数据,核心技术包括`requests`(网络请求)、`BeautifulSoup4`(HTML解析)和`lxml`(高效解析器)。
- **数据处理层**:对爬取的原始数据进行清洗、转换和计算(如温差计算),通过Python内置类型系统实现。
- **报告生成层**:将处理后的数据写入Excel并生成可视化图表,依赖`openpyxl`库实现Excel文件操作。
- **核心设计思路**:
1. **健壮性优先**:通过异常处理(网络超时、连接错误)和安全解析函数(`safe_find_text`、`safe_int_convert`)保障数据获取稳定性。
2. **模块化解耦**:数据爬取(`fetch_weather_data`)与报告生成(`create_excel_report`)完全分离,便于单独维护。
3. **自动化格式处理**:通过封装列宽调整、样式设置、图表生成等功能,减少人工干预。
2. "我"的负责模块和结果
作为核心开发者,负责项目全流程实现,重点模块及成果如下:
- **数据爬取模块**:
- 实现`fetch_weather_data`函数,通过`requests`发送HTTP请求,结合`BeautifulSoup4`解析页面结构,精准提取北京7天天气预报数据(日期、天气状况、最高/最低温度)。
- 设计异常处理机制,覆盖网络超时、连接失败等场景,确保程序稳定性。
- **Excel自动化模块**:
- 开发数据写入功能(`write_data_to_sheet`),实现温差自动计算(通过Excel公式`=Cx-Dx`)。
- 实现格式美化:表头加粗(`set_header_style`)、温度单位格式化(`apply_temperature_format`)、列宽自适应(`adjust_column_width`)。
- 开发图表生成功能(`create_temperature_chart`),生成包含最高/最低温度趋势的折线图,带数据点标注和图例。
- **最终成果**:
- 成功生成"天气报告.xlsx",包含7天完整数据、温差计算、平均值统计及可视化图表。
- 脚本可直接运行,无需修改参数,符合PEP8规范,代码注释覆盖率达80%以上。
3. "我"遇到的难点、坑和解决方案
1. **难点1:网页结构变更导致数据提取失败**
- **问题**:中国天气网页面元素class名称可能动态变化,