1、项目介绍
技术栈
采用 Python 语言开发,使用 MySQL 数据库进行数据存储,基于 Flask 框架搭建后端服务,前端采用 Echarts 实现数据可视化展示,结合 LayUI 框架开发后台管理页面,通过 requests 爬虫技术从中国天气网采集气象数据,并运用 HTML 构建前端页面结构。
功能模块
· 数据爬虫采集
· 注册登录功能
· 气象查询搜索信息
· 气象数据可视化分析
项目介绍
本系统通过 requests 爬虫技术定时从中国天气网采集各城市的气象数据,包括温度、风向、风力、湿度、天气状况、AQI 等字段,经处理后存入 MySQL 数据库。系统提供用户注册与登录功能,只有认证用户方可使用。用户可按城市名称检索气象信息,并基于 Echarts 对温度、空气质量、风力等指标进行可视化分析。后端采用 Flask 框架开发接口,后台管理页面使用 LayUI 搭建,整体实现了气象数据的自动化采集、存储、查询与直观展示。
2、项目界面
(1)天气气象数据可视化大屏
该页面是中国气象数据分析平台,展示当前城市气象信息、空气质量仪表盘、各地区气象数据分布、实时气象数据轮播,搭配空气质量预警分布、全国风向与风力统计等可视化模块,呈现全国气象相关数据。

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

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

(4)爬虫日志
该页面是中国气象质量分析平台的爬虫日志管理模块,支持按日志内容检索爬虫运行记录,以表格形式展示每一次爬虫任务的编号、日志详情和执行时间,提供分页功能,方便管理员追溯爬虫运行状态与结果。

(5)注册登录界面
该页面是全国气象数据爬取分析平台的后台登录界面,提供账号密码输入区域,配备自动登录选项、登录按钮与注册账号入口,用于管理员身份验证,是进入系统后台的专属入口,保障系统操作的权限安全。

(6)Python爬虫程序
该页面是全国气象数据爬取分析平台的代码开发界面,展示Python气象数据采集相关代码,实现从指定接口获取天气数据、处理请求头与城市配置,控制台实时输出数据插入数据库的SQL语句,完成气象数据的自动化采集与入库。

3、项目说明
一、技术栈简要说明
本系统采用 Python 语言开发,使用 MySQL 数据库进行数据存储,基于 Flask 框架搭建后端服务。前端采用 Echarts 实现数据可视化展示,结合 LayUI 框架开发后台管理页面,通过 requests 爬虫技术从中国天气网采集气象数据,并运用 HTML 构建前端页面结构。
二、功能模块详细介绍
· 数据爬虫采集
用户可以手动启动爬虫程序,利用 requests 爬虫技术对中国天气网的气象数据进行采集。采集的字段包括城市、日期、当前温度、风向、风力、风速、天气状况、AQI 等信息。采集到的数据自动存储到 MySQL 数据库中。系统还提供爬虫日志管理模块,以表格形式展示每次爬虫任务的编号、日志详情和执行时间,支持按日志内容检索,方便管理员追溯爬虫运行状态与结果。代码开发界面展示 Python 气象数据采集相关代码,控制台实时输出数据插入数据库的 SQL 语句。
· 注册登录功能
系统要求用户必须注册并登录后才能使用。注册界面提供账号密码输入区域,配备自动登录选项和注册账号入口。用户注册信息存储到 MySQL 数据库中。登录界面用于身份验证,保障系统操作的权限安全,是进入系统后台的专属入口。
· 气象查询搜索信息
用户登录系统后,可以通过搜索城市名称查询到该城市的气象数据。后台空气数据管理界面支持按地区检索气象数据,以表格形式展示各城市的温度、风向、风力、湿度、天气、AQI 等信息,提供数据查看、编辑、删除操作与分页功能,方便用户快速定位和操作目标数据。
· 气象数据可视化分析
用户登录系统后,可对气象数据进行多维度可视化分析。天气气象数据可视化大屏展示当前城市气象信息、空气质量仪表盘、各地区气象数据分布、实时气象数据轮播,搭配空气质量预警分布、全国风向与风力统计等可视化模块。可视化分析涵盖温度数据、空气质量数据、风力数据以及综合数据等多个维度,以直观的图表形式呈现全国气象相关数据的分布与变化趋势。
三、项目总结
本系统通过 requests 爬虫技术定时从中国天气网采集各城市的气象数据,包括温度、风向、风力、湿度、天气状况、AQI 等字段,经处理后存入 MySQL 数据库。系统提供用户注册与登录功能,只有认证用户方可使用。用户可按城市名称检索气象信息,并基于 Echarts 对温度、空气质量、风力等指标进行可视化分析。后端采用 Flask 框架开发接口,后台管理页面使用 LayUI 搭建。管理员可通过后台控制界面查看欢迎信息与当前时间,提供启动爬虫、数据监控的快捷操作入口,同时呈现系统运行的相关环境信息。爬虫日志模块方便管理员追溯每次采集任务的状态与结果。整体实现了气象数据的自动化采集、存储、查询与直观展示,为居民出行规划和企业生产决策提供了科学的气象数据支持。

4、核心代码
python
步骤1:设置请求头
self.baseUrl = r"http://d1.weather.com.cn/sk_2d/"
self.headers = {'Accept': "*/*",
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'keep-alive',
'Connection': '',
'Cookie': 'f_city=北京|101010100|; Hm_lvt_080dabacb001ad3dc8b9b9049b36d43b=1637305568,1637734650,1639644011,1639710627; Hm_lpvt_080dabacb001ad3dc8b9b9049b36d43b=1639723697'.encode("utf-8").decode("latin1"),
'Host': 'd1.weather.com.cn',
'Referer': 'http://www.weather.com.cn/',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36', }
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
步骤2:发送请求
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
步骤3:解析数据并保存到数据库
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 = query(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)
query(update_sql)
query(sql)