一、项目概述
本项目旨在通过爬取中国天气网的天气数据,将福建省九个城市(福州、厦门、莆田、三明、泉州、漳州、南平、龙岩、宁德)的天气信息存储到 MySQL 数据库中,并利用数据绘制多种图表进行可视化展示。同时,借助 Flask 框架搭建了一个简单的 Web 应用,方便用户在网页上查看不同城市的天气数据及图表。
二、项目架构与技术栈
- 编程语言:Python
- Web 框架:Flask,用于构建 Web 应用,实现用户界面与数据的交互。
- 数据库:MySQL,通过
pymysql
库连接,存储天气数据。 - 数据处理与分析:
pandas
库用于数据读取、处理和转换。 - 网页解析:
requests
库发送 HTTP 请求获取网页内容,BeautifulSoup
库解析 HTML 页面,提取所需天气数据。 - 数据可视化:
matplotlib
库绘制各种天气数据图表,如温度曲线、风向雷达图、天气状况柱状图等。
三、核心代码模块解析
main.py
:项目的主入口文件,整合了整个项目的流程。- 首先创建 Flask 应用实例
app
,定义了两个路由:'/'
和'/<city_name>'
。 - 在
if __name__ == '__main__':
语句块中:- 连接 MySQL 数据库,创建数据库游标
cursor
。 - 调用
createTables
函数创建hours
和days
两张数据表,用于存储天气数据。 - 遍历福建省城市列表,对每个城市执行以下操作:
- 根据城市编号构造天气网页 URL,调用
getText
函数获取网页内容。 - 利用
getToday
、getDay1_7
和getDay8_14
函数从网页内容中提取当天、未来 7 天和未来 8 - 14 天的天气数据。 - 将提取的数据分别通过
write_24hours
和write_14days
函数写入数据库表中。
- 根据城市编号构造天气网页 URL,调用
- 提交数据库事务,确保数据写入成功。
- 创建
sqlalchemy
的数据库引擎,用于后续数据读取和绘图。 - 从数据库读取数据,并对每个城市调用一系列绘图函数(如
plotTemperature
、plotWindDirection
等)绘制天气图表,保存到本地static
文件夹。 - 最后关闭游标和数据库连接,启动 Flask 应用。
- 连接 MySQL 数据库,创建数据库游标
- 首先创建 Flask 应用实例
city.py
:定义了一个字典citys
,存储福建省各个城市名称及其在中国天气网对应的编号,方便在项目中根据城市名称获取编号,构造正确的 URL 来爬取天气数据。getHtml.py
:包含多个用于获取和解析网页天气数据的函数。getText
函数:发送 HTTP 请求获取指定 URL 的网页内容,设置请求头模拟浏览器访问,根据响应状态码处理并返回网页文本。getToday
函数:从网页 HTML 中解析出当天 24 小时内每小时的天气数据,包括时间、温度、风向、风力、降水量、相对湿度和空气质量等信息,以列表形式返回。getDay1_7
函数:提取网页中未来 7 天的天气数据,如日期、天气状况、最高温度、最低温度、风向和风力等,整理成列表。getDay8_14
函数:类似地,获取未来 8 - 14 天的天气数据,包含日期、天气、最高和最低温度、风向等信息,并返回列表。
mysql.py
:提供了数据库操作相关的函数。createTables
函数:创建hours
和days
数据表,定义了表结构,包括字段名称、数据类型和主键等。clearTables
函数:清空hours
和days
表中的数据,以便重新写入新的数据。write_24hours
和write_14days
函数:分别将 24 小时天气数据和 14 天天气数据按照指定的 SQL 插入语句格式写入对应的数据库表中。
plot_pictures.py
:利用matplotlib
库绘制各种天气图表。plotStatus
函数:绘制未来 14 天天气状况柱状图,统计不同天气状况出现的天数,用不同颜色区分天气类型(如晴、雨、多云等),设置图表标题、坐标轴标签,并保存为图片。plotTemperature
函数:绘制未来 14 天高温和低温变化曲线,在图上标注每个数据点的温度值,设置坐标轴范围、标签和标题后保存图片。plotWindDirection
函数:针对未来 14 天风向数据,将风向转换为角度,统计各角度风向出现的次数,绘制风向雷达图,设置极坐标属性、颜色和标题后保存。- 还有
plotTemperature_24h
、plotWindDirection_24h
、plotHumidity_24h
、plotAir_24h
和plotRainfall_24h
等函数,分别绘制近 24 小时的温度、风向、湿度、空气质量和降雨量的图表,功能与 14 天的类似,但时间范围和数据处理细节有所不同。
四、项目运行与使用
- 确保已安装项目所需的所有 Python 库(
pymysql
、pandas
、sqlalchemy
、matplotlib
、Flask
、requests
、BeautifulSoup
)。 - 在终端或命令提示符中运行
main.py
文件。 - 启动成功后,在浏览器中访问
http://127.0.0.1:5000/
,即可进入项目首页,显示福建省九个城市的列表。 - 点击城市名称链接,如
http://127.0.0.1:5000/福州
,将跳转到该城市的天气页面,展示该城市的 24 小时天气数据表格和未来 14 天天气数据表格,以及一系列对应的天气图表,包括温度变化曲线、风向雷达图、天气状况柱状图等,方便用户直观了解城市天气信息。
五、项目总结与展望
本项目成功实现了从网页爬取福建省城市天气数据、存储到数据库并进行可视化展示的功能,通过 Flask 应用提供了简单易用的用户界面。然而,项目仍有可改进之处。例如,可增加数据更新机制,定期自动获取最新天气数据;优化图表的美观性和交互性,提升用户体验;考虑扩展到更多地区的天气数据获取与分析,增强项目的实用性和通用性。
希望通过本项目的解析,能帮助读者理解如何利用 Python 技术栈进行数据获取、处理与可视化,并为进一步开发类似项目提供参考和启发。