计算机毕业设计:Python全国气象数据采集与可视化分析平台 Flask框架 数据分析 可视化 爬虫 气象数据分析(建议收藏)✅
1、项目介绍
技术栈
采用 Python 语言开发,基于 Flask 轻量级框架搭建 Web 应用程序,使用 MySQL 数据库进行数据存储,通过 requests 爬虫框架从中国天气网获取气象数据,前端利用 Echarts 技术实现数据可视化大屏展示。
功能模块
· 数据可视化分析大屏
· 后台数据控制台
· 数据管理
· 爬虫日志管理
· 注册登录
· 采集页面
项目介绍
本系统基于 Flask 框架构建气象数据可视化平台,通过 requests 库从中国天气网采集各城市气象数据,经 Pandas 库处理分析后存入 MySQL 数据库。系统采用 MVC 架构模式,将数据层、控制层和视图层分离。前端利用 Echarts 技术对温度、风速、风向、空气质量、风力等气象指标进行可视化渲染,展示北京温度与风速变化趋势、全国风向分布饼图、空气质量分布柱状图等。后台提供数据管理、爬虫日志管理、控制台运维等功能,支持管理员启动爬虫、监控数据及编辑气象信息。
2、项目界面
(1)数据可视化分析大屏
该页面是气象数据可视化大屏,展示北京温度与风速变化趋势、全国风向分布饼图、全国气象实时情况列表、全国空气质量分布柱状图以及全国风力分布柱状图,直观呈现多维度气象数据。

(2)后台数据控制台
该页面是气象数据可视化大屏的管理员后台首页,展示管理员欢迎信息与当前时间,提供启动爬虫、数据监控的快捷操作入口,同时呈现系统运行的相关环境信息,方便管理员进行系统运维与数据采集操作。

(3)数据管理
该页面是气象数据可视化大屏的后台天气数据管理界面,支持按地区检索空气数据,以表格形式展示各城市的温度、风向、风力、湿度、天气、AQI等气象信息,提供分页查看与数据编辑操作功能。

(4)爬虫日志管理
该页面是气象数据可视化大屏的爬虫日志管理界面,支持按日志内容检索爬虫运行记录,提供启动爬虫的操作入口,以表格形式展示每一次爬虫任务的编号、日志详情和执行时间,方便管理员追溯爬虫运行状态与结果。

(5)注册登录
该页面是气象数据可视化大屏的后台登录界面,集成了账号密码输入、自动登录选择、登录操作等功能模块,支持管理员通过身份验证登录系统,同时界面背景展示了全球气象数据网络可视化布局,整合了登录交互与气象数据展示双重功能。
(6)采集页面
该页面是基于Flask的全国气象数据采集及可视化系统的代码开发界面,展示了用户登录验证、后台页面路由跳转的核心代码逻辑,控制台同步输出数据库查询语句,实现用户权限校验与后台页面访问控制的功能。

3、项目说明
一、技术栈简要说明
本系统采用 Python 语言开发,基于 Flask 轻量级框架搭建 Web 应用程序,使用 MySQL 数据库进行数据存储,通过 requests 爬虫框架从中国天气网获取气象数据,前端利用 Echarts 技术实现数据可视化大屏展示,系统架构采用 MVC 模式将数据层、控制层和视图层分离。
二、功能模块详细介绍
· 数据可视化分析大屏
该页面是气象数据可视化大屏的核心展示区域,展示北京温度与风速变化趋势折线图、全国风向分布饼图、全国气象实时情况列表、全国空气质量分布柱状图以及全国风力分布柱状图。通过多种图表形式的组合,直观呈现多维度气象数据,帮助用户快速理解全国气象分布特征与变化规律。
· 后台数据控制台
该页面是管理员后台首页,展示管理员欢迎信息与当前时间,提供启动爬虫、数据监控的快捷操作入口,同时呈现系统运行的相关环境信息,包括服务器状态、数据库连接情况等。方便管理员进行系统运维与数据采集操作,提升管理效率。
· 数据管理
该页面是后台天气数据管理界面,支持按地区检索空气数据,以表格形式展示各城市的温度、风向、风力、湿度、天气、AQI 等气象信息。提供分页查看功能,用户可逐页浏览大量数据,同时支持数据编辑操作,可对气象信息进行修改和更新,确保数据的准确性和时效性。
· 爬虫日志管理
该页面是爬虫日志管理界面,支持按日志内容检索爬虫运行记录,提供启动爬虫的操作入口。以表格形式展示每一次爬虫任务的编号、日志详情和执行时间,方便管理员追溯爬虫运行状态与结果,及时发现和解决爬虫采集过程中的问题。
· 注册登录
该页面是后台登录界面,集成了账号密码输入、自动登录选择、登录操作等功能模块,支持管理员通过身份验证登录系统。界面背景展示了全球气象数据网络可视化布局,整合了登录交互与气象数据展示双重功能,保障系统操作的权限安全。
· 采集页面
该页面是系统的代码开发界面,展示了用户登录验证、后台页面路由跳转的核心代码逻辑,包括 Flask 路由配置、视图函数实现、用户权限校验等关键代码。控制台同步输出数据库查询语句,实现用户权限校验与后台页面访问控制的功能,方便开发者调试和维护系统。
三、项目总结
本系统基于 Flask 框架构建气象数据可视化平台,通过 requests 库从中国天气网采集各城市气象数据,经 Pandas 库处理分析后存入 MySQL 数据库。系统采用 MVC 架构模式,将数据层、控制层和视图层分离,使得系统易于维护和扩展。前端利用 Echarts 技术对温度、风速、风向、空气质量、风力等气象指标进行可视化渲染,展示北京温度与风速变化趋势、全国风向分布饼图、空气质量分布柱状图等。后台提供数据管理、爬虫日志管理、控制台运维等功能,支持管理员启动爬虫、监控数据及编辑气象信息。整体实现了气象数据的自动化采集、存储、管理与可视化展示,为用户理解和分析气象数据提供了高效便捷的工具。
4、核心代码
import json
import requests
import xlwt
import datetime
import os
import time
from utils import dbUtil
class GetWeather:
def __init__(self):
self.baseUrl = r"http://d1.weather.com.cn/sk_2d/"
self.headers = {}
self.loadList = []
self.cityList = [] # 格式为:列表里面的子列表都是一个省份的所有城市,子列表里所有元素都是字典,每个字典有两项
self.cityDict = {}
self.result = xlwt.Workbook(encoding='utf-8', style_compression=0)
self.sheet = self.result.add_sheet('result', cell_overwrite_ok=True)
self.cityRow = 0
self.totalGet = 0
current_path = os.path.dirname(__file__)
with open(current_path + "/CITY.txt", 'r', encoding='UTF-8') as load_f:
loadList = json.load(load_f) # 34个省份
for i in range(0, 4):
self.cityList.append(loadList[i])
for i in range(4, 34):
for j in loadList[i]['cityList']:
self.cityList.append(j)
for i in self.cityList:
if 'districtList' in i.keys():
self.cityDict.setdefault(i['cityName'], i['cityId'] + "01") # 省
else:
self.cityDict.setdefault(i['provinceName'], i['id'] + "0100") # 直辖市
print(len(self.cityDict))
def __getWeatherInfo__(self):
db = dbUtil()
count = 0
for city, id in self.cityDict.items():
try:
self.totalGet = self.totalGet + 1
self.sheet.write(self.cityRow, 0, city) # 写当前城市名
PageUrl = self.baseUrl + id + ".html?_" + str(int(time.time() * 1000))
response = requests.get(PageUrl, headers=self.headers, allow_redirects=False)
response.encoding = "utf-8"
self.htmlResult = response.text
data = json.loads(self.htmlResult.replace("var dataSK=", ""))
nameen = data["nameen"] # 城市拼音
cityname = data["cityname"] # 城市名称
temp = data["temp"] # 当前温度
WD = data["WD"] # 风向
WS = data["WS"].replace("级", "") # 风力
wse = data["wse"].replace("km/h", "") # 风速
sd = data["sd"].replace("%", "") # 湿度
weather = data["weather"] # 天气
record_date = data["date"] # 时间
record_time = data["time"] # 时分
aqi = data["aqi"] # 时分
judge_sql = "select count(id) from `weather` where nameen = '" + nameen + "' and cityname='" + cityname + "' and record_date='" + record_date + "' and record_time='" + record_time + "'";
sql = "INSERT INTO `weather` VALUES (null, '" + nameen + "', '" + cityname + "', '" + record_date + "', '" + record_time + "', " + str(
temp) + ", '" + WD + "', " + WS + ", " + wse + ", " + sd + ", '" + weather + "', " + aqi + ", '" + time.strftime(
"%Y-%m-%d %H:%M:%S", time.localtime()) + "',0);"
i = db.query_noargs(judge_sql)[0][0]
if int(i) > 0:
print("跳过:", judge_sql)
continue
update_sql = "update `weather` set is_old=1 where nameen = '" + nameen + "' and cityname='" + cityname + "'";
print("插入:", sql)
count += 1
db.query_noargs(update_sql)
db.query_noargs(sql)
except Exception as e:
print(e)
continue
t = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
sql = "insert into slog VALUES (NULL, \"【爬虫启动】爬取数据全国天气数据运行成功,获取数据:" + str(count) + "条\",\"" + t + "\")"
db.query_noargs(sql)
db.close_commit()
def __main__(self):
print(datetime.datetime.now())
self.__getWeatherInfo__()
print(datetime.datetime.now())
# 后台调用爬虫
def online():
weather = GetWeather()
weather.__main__()
return 200
5、项目列表





DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)