【Python原创设计】基于Python Flask的全国气象数据采集及可视化系统-附下载方式以及项目参考论文,原创项目其他均为抄袭
基于Python Flask的全国气象数据采集及可视化系统
- 一、项目简介
- 二、项目技术
- 三、项目功能
- 四、运行截图
- 五、分类说明
- 六、实现代码
- 七、数据库结构
- 八、源码下载
一、项目简介
本项目是一个基于Web技术的实时气象数据可视化系统。通过爬取中国天气网的各个城市气象数据,并将其保存到自己的数据库中,我们利用Python、Flask、ECharts和MySQL等技术,实现了数据的分析和可视化呈现。这是一个采用B/S架构的现代化气象数据管理系统,用户只需通过浏览器便可访问。在项目完善版本中,我们进一步优化了数据处理和可视化,提高了系统的性能和用户体验。
二、项目技术
- Python爬虫技术:借助Python强大的网络爬虫库,我们能够高效地从中国天气网上获取实时气象数据,并将其转化为结构化数据。
- Flask后端框架:作为一种轻量级的后端框架,Flask简化了开发流程,使得我们能够快速搭建灵活且可扩展的Web应用程序。
- MySQL数据库:作为一个成熟的关系型数据库管理系统,MySQL提供了高效可靠的数据存储和查询能力,使得我们能够方便地管理爬取的气象数据。
- ECharts大数据可视化:ECharts作为当时流行的数据可视化库,为我们提供了丰富的图表类型和交互式特性,使得我们能够将庞大的气象数据以直观的图表形式展示给用户。
- layui后台管理前端框架:借助layui框架,我们实现了美观、简洁的后台管理界面,提升了用户操作的友好性和便捷性。
三、项目功能
系统功能模块的设计是基于对现实需求的深入理解和用户体验的关注,详情功能结构图,如下图所示。主要包括以下五大功能:
- 可视化功能模块:通过ECharts技术,将爬取的气象数据转化为图表形式,以直观的方式展示各城市的气象情况,使用户能够快速把握气象趋势和变化,更好地做出决策。
- 版本管理功能模块:用于记录系统的不同版本,包括功能更新、性能优化和Bug修复等内容,确保系统持续发展和不断完善。
- 用户管理功能模块:实现用户注册、登录和权限控制,不同用户拥有不同的菜单权限,保障系统的安全性和数据隐私。
- 实时气象数据管理功能模块:用于存储、更新和管理从中国天气网爬取的实时气象数据,确保数据的准确性和及时性。
- 爬虫管理功能模块:针对爬虫任务进行管理,包括设置爬取频率、指定目标城市等,以确保爬虫的高效稳定运行。
四、运行截图
大屏可视化页面
用户登录页面
用户注册页面
后台管理首页面
后台用户管理页面
后台版本管理页面
后台气象管理页面
后台气象编辑页面
后台爬虫日志管理页面
五、分类说明
AQI:
0-50良好
51-100:中等
101-150:偏差,对敏感人群不健康
151-200:差,不健康
201-300:极差,非常不健康
300+:有毒
风力等级:
六、实现代码
爬虫头部实现代码
class GetWeather:def __init__(self):self.baseUrl = r""self.headers = {'Accept': "*/*",'Accept-Encoding': 'gzip, deflate','Accept-Language': 'keep-alive','Connection': '','Cookie': ''.encode("utf-8").decode("latin1"),'Host': 'd1.weather.com.cn','Referer': '','User-Agent': '', }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 = 0self.totalGet = 0
数据清洗存入数据库
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)continueupdate_sql = "update `weather` set is_old=1 where nameen = '" + nameen + "' and cityname='" + cityname + "'";print("插入:", sql)count += 1db.query_noargs(update_sql)db.query_noargs(sql)
首页城市空气质量统计
# 获取城市空气质量统计
def get_AQI_total_data():db = dbUtil()lh_sql = "SELECT COUNT(id) FROM weather WHERE aqi<=50 AND is_old=0"zd_sql = "SELECT COUNT(id) FROM weather WHERE aqi>50 AND aqi<=100 AND is_old=0"pc_sql = "SELECT COUNT(id) FROM weather WHERE aqi>100 AND aqi<=150 AND is_old=0"c_sql = "SELECT COUNT(id) FROM weather WHERE aqi>150 AND aqi<=200 AND is_old=0"jc_sql = "SELECT COUNT(id) FROM weather WHERE aqi>200 AND aqi<=300 AND is_old=0"yd_sql = "SELECT COUNT(id) FROM weather WHERE aqi>300 AND is_old=0"lh = db.query_noargs(lh_sql)[0][0]zd = db.query_noargs(zd_sql)[0][0]pc = db.query_noargs(pc_sql)[0][0]c = db.query_noargs(c_sql)[0][0]jc = db.query_noargs(jc_sql)[0][0]yd = db.query_noargs(yd_sql)[0][0]db.close_commit()return jsonify([{"time": "良好", "value": lh, "name": "空气质量"},{"time": "中等", "value": zd, "name": "空气质量"},{"time": "偏差", "value": pc, "name": "空气质量"},{"time": "较差", "value": c, "name": "空气质量"},{"time": "极差", "value": jc, "name": "空气质量"},{"time": "有毒", "value": yd, "name": "空气质量"}])
空气质量可视化构建
function center_kqzlfm() { $.ajax({ url: "/main/aqi",method: "get",success: function (obj) {// 基于准备好的dom,初始化echarts实例 const myChart = echarts.init(document.getElementById("kqzlfm-table")) // 指定图表的配置项let option = {...} // 指定图表的数据let data = obj //数据处理 开始let xKey = "time" let yKey = "value" let sKey = "name"let seriesArr = []let dataColumn = [] //....省略数据格式化处理太长了option.yAxis.type = "value"option.xAxis.type = "category"option.xAxis.data = dataColumn// 数据处理完 option.series = seriesObj// 使用刚指定的配置项和数据显示图表。myChart.setOption(option) } })}
七、数据库结构
slog表
字段名称 | 数据类型 | 是否必填 | 注释 |
---|---|---|---|
id | int | 是 | |
log | varchar(255) | 否 | |
create_time | datetime | 否 |
sys_version表
字段名称 | 数据类型 | 是否必填 | 注释 |
---|---|---|---|
id | int | 是 | 系统版本 |
sys_name | varchar(255) | 否 | 名称 |
sys_version | varchar(255) | 否 | 描述 |
user表
字段名称 | 数据类型 | 是否必填 | 注释 |
---|---|---|---|
id | int | 是 | |
name | varchar(255) | 否 | 用户名称(供应商名称) |
account | varchar(255) | 否 | 用户账号 |
password | varchar(255) | 否 | 用户密码 |
company | varchar(255) | 否 | 企业名称 |
phone | varchar(255) | 否 | 电话号码 |
varchar(255) | 否 | 邮箱 | |
type | int | 否 | 0管理员,1普通用户 |
status | int | 否 | 0禁用1启用 |
weather表
字段名称 | 数据类型 | 是否必填 | 注释 |
---|---|---|---|
id | int | 是 | |
nameen | varchar(255) | 否 | 城市拼音 |
cityname | varchar(50) | 否 | 城市名称 |
record_date | varchar(50) | 否 | 天气时间 |
record_time | varchar(50) | 否 | 实时时分 |
temp | int | 否 | 当前温度 |
wd | varchar(20) | 否 | 风向 |
ws | int | 否 | 凤力 |
wse | int | 否 | 风速 |
sd | int | 否 | 湿度 |
weather | varchar(20) | 否 | 天气 |
aqi | int | 否 | 空气质量 |
create_time | datetime | 是 | 数据创建时间 |
is_old | int | 否 | 1老数据,0新数据 |
八、源码下载
源码、安装教程文档、项目简介文档以及其它相关文档已经上传到是云猿实战官网,可以通过下面官网进行获取项目!
相关文章:
【Python原创设计】基于Python Flask的全国气象数据采集及可视化系统-附下载方式以及项目参考论文,原创项目其他均为抄袭
基于Python Flask的全国气象数据采集及可视化系统 一、项目简介二、项目技术三、项目功能四、运行截图五、分类说明六、实现代码七、数据库结构八、源码下载 一、项目简介 本项目是一个基于Web技术的实时气象数据可视化系统。通过爬取中国天气网的各个城市气象数据,…...
【力扣】42. 接雨水 <模拟、双指针、单调栈>
【力扣】42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 目录 【力扣】42. 接雨水题解暴力双指针单调栈 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&…...
【leetcode 力扣刷题】链表基础知识 基础操作
链表基础知识 基础操作 链表基础操作链表基础知识插入节点删除节点查找节点 707. 设计链表实现:单向链表:实现:双向链表 链表基础操作 链表基础知识 在数据结构的学习过程中,我们知道线性表【一种数据组织、在内存中存储的形式】…...
关于openfeign调用时content-type的问题
问题1描述: 今天在A服务使用openfeign调用B服务的时候,发现经常会偶发性报错。错误如下: 情况为偶发,很让人头疼。 两个接口如下: A服务接口: delayReasonApi.test(student);就是使用openfeign调用B服务的…...
OpenCV 玩转图像和视频
为什么学OpenCV? • OpenCV ⽀持对图像缩放、旋转、绘制⽂字图形等基础操作 • OpenCV 库包含了很多计算机视觉领域常⻅算法:⽬标检测、⽬标跟踪等 OpenCV 简介 • OpenCV (Open Source Computer Vision) 是计算机视觉和机器学习软件库 • Intel 1999…...
技术分享 | 如何编写同时兼容 Vue2 和 Vue3 的代码?
LigaAI 的评论编辑器、附件展示以及富文本编辑器都支持在 Vue2(Web)与 Vue3(VSCode、lDEA)中使用。这样不仅可以在不同 Vue 版本的工程中间共享代码,还能为后续升级 Vue3 减少一定阻碍。 那么,同时兼容 Vue…...
基于ArcGis提取道路中心线
基于ArcGis提取道路中心线 文章目录 基于ArcGis提取道路中心线前言一、生成缓冲区二、导出栅格数据三、导入栅格数据四、新建中心线要素五、生成中心线总结 前言 最近遇到一个问题,根据道路SHP数据生成模型的时候由于下载的道路数据杂项数据很多,所以导…...
xcode14.3更新一系列问题
1. Missing file libarclite_iphoneos.a (Xcode 14.3) 解决方法 Xcode升级到14.3后编译失败,完整错误日志: File not found: /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneo…...
1U和2U的服务器怎么选择
企业建设网站的过程中,离不开租用服务器的环节,服务器在多种场景里面都可以发挥作用,服务器租用渠道有哪些?1U、2U选哪种服务器比较好?大家跟着壹基比小鑫一起来了解具体内容吧! 1U、2U选哪种服务器比较好&…...
【SA8295P 源码分析】05 - SA8295P QNX Host 上电开机过程 进一步梳理(结合代码)
【SA8295P 源码分析】05 - SA8295P QNX Host 上电开机过程 进一步梳理(结合代码) 一、APPS PBL(Application Primary Boot Loader):固化在CPU ROM中1.1 APPS PBL 加载 XBL Loader1.2 XBL Loader加载验证并运行SMSS进行自检,自检完成后触发Warm Reset1.3 WarmRest后,APPS…...
【数据结构与算法】迪杰斯特拉算法
迪杰斯特拉算法 介绍 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。 算法过程 设置…...
python爬虫-网页数据提取
import requests #headers 网页右键->Network->最下面的User-Agent复制。 headers {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36"} #你想要的网址 url &q…...
ZigBee的Many-to-One和Source Routing
1. Many-to-One Routing Many-to-One Routing,是一种简单的路由机制,使得整个网络中的路由设备拥有回到中心节点的路由。 在这种机制下,中心节点周期性发送Many-to-One route discovery广播(协议栈默认设置为60s,可以…...
七夕节 Chinese Valentine‘s Day 的由来
农历七月初七是七夕节。Qixi Festival falls on the seventh day of the seventh lunar month. 以前有一个牛郎,和他的哥哥和嫂子住在一起。他放的一头牛曾经是天庭的一个神仙,但他违反天庭的戒律,变成牛放到了人间。As the story goes,once …...
掌握JDK21全新结构化并发编程,轻松提升开发效率!
1 概要 通过引入结构化并发编程的API,简化并发编程。结构化并发将在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和取消操作,提高可靠性,并增强可观察性。这是一个预览版的API。 2 历史 结构化并发是由JEP 42…...
【SA8295P 源码分析】00 - 系列文章链接汇总 - 持续更新中
【SA8295P 源码分析】00 - 系列文章链接汇总 - 持续更新中 一、分区、下载、GPIO等杂项相关二、开机启动流程代码分析二、OpenWFD 显示屏模块三、Touch Panel 触摸屏模块四、QUPv3 及 QNX Host透传配置五、Camera 摄像头模块(当前正在更新中...)六、网络…...
TCP拥塞控制详解 | 6. 主动队列管理
网络传输问题本质上是对网络资源的共享和复用问题,因此拥塞控制是网络工程领域的核心问题之一,并且随着互联网和数据中心流量的爆炸式增长,相关算法和机制出现了很多创新,本系列是免费电子书《TCP Congestion Control: A Systems …...
前端学习清单
顺序不分先后。 技术名称技术描述技术链接HTML5HTML5是下一代的HTML标准,是一种用于结构化内容的标记语言。MDN|HTMLCSS3CSS3是CSS技术的升级版本,它的最大好处就是可以让网页设计师更加方便的为网页添加各种各样的样式,而不用再局限于文字、…...
go atomic原子操作详细解读
文章目录 概要1、基本知识1.1 原子操作是什么1.2 CPU怎么实现原子操作的? 2、atomic包2.1、 Add函数2.2、CompareAndSwap函数2.3、Swap函数2.4、Load函数2.5、Store函数 3、atomic.Value值 概要 atomic包是golang通过对底层系统支持的原子操作进行封装,…...
Vue用JSEncrypt对长文本json加密以及发现解密失败
哈喽 大家好啊,最近发现进行加密后 超长文本后端解密失败,经过看其他博主修改 JSEncrypt原生代码如下: // 分段加密,支持中文JSEncrypt.prototype.encryptUnicodeLong function (string) {var k this.getKey();//根据key所能编…...
Excel/PowerPoint折线图从Y轴开始(两侧不留空隙)
默认Excel/PowerPoint折线图是这个样子的: 左右两侧都留了大块空白,很难看 解决方案 点击横坐标,双击,然后按下图顺序点击 效果...
C++的类成员对齐
这是个小语法点,之前我们的对齐方式都是使用#pragma pack,这个方式实际是依赖编译器,且粒度粗(如果#pragma pack(1)之后没有#pragma pack(),那就作用整个进程了)。在C11之后引入关键字alignas,以此来实现对齐更加便利,…...
敏感挂载userhelper容器逃逸复现
目录 前言 分析 实验 前言 分析 实验 # Creates a payload cat "#!/bin/sh" > /evil-helper cat "ps > /output" >> /evil-helper chmod x /evil-helper # Finds path of OverlayFS mount for container # Unless the configuration ex…...
深度解读Promise.prototype.finally
由一个问题引发的血案: 手写源码实现Promise.prototype.finally。 我们知道,对于promise来讲,当状态敲定,无论状态兑现或拒绝时都需要调用的函数,可以使用Promise.prototype.finally的回调来实现。那么如何手写实现Pro…...
如何实现24/7客户服务自动化?建设智能客服知识库
客户自助服务是指用户通过企业或者第三方建立的网络平台或者终端,实现相关的自定义处理。实现客户服务自动化,对提高客户满意度、维持客户关系至关重要。客户服务自动化可以帮助企业以更快的速度和更高的效率来满足客户的售后服务要求,以进一…...
和鲸 ModelWhale 与中科可控多款服务器完成适配认证,赋能中国云生态
当前世界正处于新一轮技术革命及传统产业数字化转型的关键期,云计算作为重要的技术底座,其产业发展与产业规模对我国数字经济的高质量运行有着不可取代的推动作用。而随着我国数字上云、企业上云加快进入常规化阶段,云计算承载的业务应用越来…...
selenium +Jmeter 的性能测试
通过Jmeter快速将已有的Selenium 代码以性能测试的方式组织起来,并使用JMeter 丰富的报表展示测试结果 from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.by import By driver …...
探索高效的HTTP异步接口测试方法:从轮询等待到自动化方案
本文将深入探讨HTTP异步接口测试的多个方面,包括轮询等待、性能测试以及自动化方案。通过详细的解释和实际案例,帮助您了解如何有效地测试异步接口,确保系统的稳定性和性能。 在现代软件开发中,HTTP异步接口扮演着至关重要的角色&…...
Android资深工程书之LiveData核心组件原理剖析
LiveData是Android架构组件库中的一个类,用于在应用程序组件之间共享数据。它是一种可观察的数据持有者,可以感知应用程序组件的生命周期,并在数据发生变化时通知观察者。 使用LiveData 在Android应用程序中使用LiveData,你可以…...
Vue的五种方法实现加减乘除运算
五种方法的详细说明: 计算属性(Computed Properties): 计算属性是Vue.js提供的一种便捷的属性,它根据依赖的数据动态计算出一个新的值。计算属性的值会被缓存,只有当依赖的数据发生变化时,才会…...
购物网站php源代码/北京网站推广助理
1,实现效果 实现下来刷新 2,实现效果 【1】添加依赖,导入V7包SwipeRefreshLayout是V4包下的,V7保护我 compile com.android.support:appcompat-v7:23.4.0 添加网络权限 【2】把需要展示的内容用SwipeRefreshLayout包裹 <?…...
wordpress 分类不显示图片/中国疫情今天最新消息
大学计算机信息技术教程习题集U大学计算机信息技术教程一级B实战习题集南通大学教育技术中心2008.6第一部分 理论部分第一套一、基础知识必做题[1]. 在计算机中为景物建模的方法有多种,它与景物的类型有密切关系,例如对树木、花草、烟火、毛发等…...
南昌网站推广公司/怎么百度推广
由于本人的书籍《算法详解(C11 语言描述)》即将出版,为了降低题解的维护难度,有关PAT考试的所有题解的更新将全部在书籍的配套仓库进行,CSDN博客中不再进行任何题解的更新。以下题解目录中的题解链接会链接到配套仓库的…...
湖南建设资质申请网站/谷歌下载官方正版
让我们通过使用TypeScript来构建一个简单的Web应用程序来入门吧 安装 TypeScript 获取TypeScript主要有两种方法: 通过npm (Node.js包管理器)通过安装Visual Studio TypeScript插件Visual Studio 2017和VIsual Studio 2015 Update 3 默认包含…...
网站建设一般多少钱新闻/百度优化插件
实验5 分支结构程序的设计1.程序填空题,不要改变与输入输出有关的语句。20004计算旅途时间输入2个整数time1和time2,表示火车的出发时间和到达时间,计算并输出旅途时间。有效的时间范围是0000到2359,不需要考虑出发时间晚于到达时…...
太原做网站要多少钱呢/培训机构营业执照如何办理
点击上方“蓝色字”可关注我们!暴走时评:区块链作为欧洲最强大的经济体,德国对区块链技术在各个领域的应用都表现出了“极大的兴趣”,包括汽车、制药、能源和公共部门管理等。作者:Yogita Khatri 翻译:May…...