基于 Python 的福建城市天气数据获取与可视化项目解析

一、项目概述

本项目旨在通过爬取中国天气网的天气数据,将福建省九个城市(福州、厦门、莆田、三明、泉州、漳州、南平、龙岩、宁德)的天气信息存储到 MySQL 数据库中,并利用数据绘制多种图表进行可视化展示。同时,借助 Flask 框架搭建了一个简单的 Web 应用,方便用户在网页上查看不同城市的天气数据及图表。

二、项目架构与技术栈

  • 编程语言:Python
  • Web 框架:Flask,用于构建 Web 应用,实现用户界面与数据的交互。
  • 数据库:MySQL,通过 pymysql 库连接,存储天气数据。
  • 数据处理与分析pandas 库用于数据读取、处理和转换。
  • 网页解析requests 库发送 HTTP 请求获取网页内容,BeautifulSoup 库解析 HTML 页面,提取所需天气数据。
  • 数据可视化matplotlib 库绘制各种天气数据图表,如温度曲线、风向雷达图、天气状况柱状图等。

三、核心代码模块解析

  1. main.py:项目的主入口文件,整合了整个项目的流程。
    • 首先创建 Flask 应用实例 app,定义了两个路由:'/' 和 '/<city_name>'
    • 在 if __name__ == '__main__': 语句块中:
      • 连接 MySQL 数据库,创建数据库游标 cursor
      • 调用 createTables 函数创建 hours 和 days 两张数据表,用于存储天气数据。
      • 遍历福建省城市列表,对每个城市执行以下操作:
        • 根据城市编号构造天气网页 URL,调用 getText 函数获取网页内容。
        • 利用 getTodaygetDay1_7 和 getDay8_14 函数从网页内容中提取当天、未来 7 天和未来 8 - 14 天的天气数据。
        • 将提取的数据分别通过 write_24hours 和 write_14days 函数写入数据库表中。
      • 提交数据库事务,确保数据写入成功。
      • 创建 sqlalchemy 的数据库引擎,用于后续数据读取和绘图。
      • 从数据库读取数据,并对每个城市调用一系列绘图函数(如 plotTemperatureplotWindDirection 等)绘制天气图表,保存到本地 static 文件夹。
      • 最后关闭游标和数据库连接,启动 Flask 应用。
  2. city.py:定义了一个字典 citys,存储福建省各个城市名称及其在中国天气网对应的编号,方便在项目中根据城市名称获取编号,构造正确的 URL 来爬取天气数据。
  3. getHtml.py:包含多个用于获取和解析网页天气数据的函数。
    • getText 函数:发送 HTTP 请求获取指定 URL 的网页内容,设置请求头模拟浏览器访问,根据响应状态码处理并返回网页文本。
    • getToday 函数:从网页 HTML 中解析出当天 24 小时内每小时的天气数据,包括时间、温度、风向、风力、降水量、相对湿度和空气质量等信息,以列表形式返回。
    • getDay1_7 函数:提取网页中未来 7 天的天气数据,如日期、天气状况、最高温度、最低温度、风向和风力等,整理成列表。
    • getDay8_14 函数:类似地,获取未来 8 - 14 天的天气数据,包含日期、天气、最高和最低温度、风向等信息,并返回列表。
  4. mysql.py:提供了数据库操作相关的函数。
    • createTables 函数:创建 hours 和 days 数据表,定义了表结构,包括字段名称、数据类型和主键等。
    • clearTables 函数:清空 hours 和 days 表中的数据,以便重新写入新的数据。
    • write_24hours 和 write_14days 函数:分别将 24 小时天气数据和 14 天天气数据按照指定的 SQL 插入语句格式写入对应的数据库表中。
  5. plot_pictures.py:利用 matplotlib 库绘制各种天气图表。
    • plotStatus 函数:绘制未来 14 天天气状况柱状图,统计不同天气状况出现的天数,用不同颜色区分天气类型(如晴、雨、多云等),设置图表标题、坐标轴标签,并保存为图片。
    • plotTemperature 函数:绘制未来 14 天高温和低温变化曲线,在图上标注每个数据点的温度值,设置坐标轴范围、标签和标题后保存图片。
    • plotWindDirection 函数:针对未来 14 天风向数据,将风向转换为角度,统计各角度风向出现的次数,绘制风向雷达图,设置极坐标属性、颜色和标题后保存。
    • 还有 plotTemperature_24hplotWindDirection_24hplotHumidity_24hplotAir_24h 和 plotRainfall_24h 等函数,分别绘制近 24 小时的温度、风向、湿度、空气质量和降雨量的图表,功能与 14 天的类似,但时间范围和数据处理细节有所不同。

四、项目运行与使用

  1. 确保已安装项目所需的所有 Python 库(pymysqlpandassqlalchemymatplotlibFlaskrequestsBeautifulSoup)。
  2. 在终端或命令提示符中运行 main.py 文件。
  3. 启动成功后,在浏览器中访问 http://127.0.0.1:5000/,即可进入项目首页,显示福建省九个城市的列表。
  4. 点击城市名称链接,如 http://127.0.0.1:5000/福州,将跳转到该城市的天气页面,展示该城市的 24 小时天气数据表格和未来 14 天天气数据表格,以及一系列对应的天气图表,包括温度变化曲线、风向雷达图、天气状况柱状图等,方便用户直观了解城市天气信息。

五、项目总结与展望

本项目成功实现了从网页爬取福建省城市天气数据、存储到数据库并进行可视化展示的功能,通过 Flask 应用提供了简单易用的用户界面。然而,项目仍有可改进之处。例如,可增加数据更新机制,定期自动获取最新天气数据;优化图表的美观性和交互性,提升用户体验;考虑扩展到更多地区的天气数据获取与分析,增强项目的实用性和通用性。

希望通过本项目的解析,能帮助读者理解如何利用 Python 技术栈进行数据获取、处理与可视化,并为进一步开发类似项目提供参考和启发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值