当前位置:网站首页>太帅了!我用炫酷大屏展示爬虫数据!
太帅了!我用炫酷大屏展示爬虫数据!
2022-08-02 14:52:00 【Python 技术】
文 | ssw
来源:Python 技术「ID: pythonall」
大屏有时纯粹是为了好看,领导的说法是“花花绿绿的效果不错”。尤其放到展厅里,整面墙壁都是大屏那种,色彩十分艳丽。
我尝试了一下。不是专业的前端,所以用vue模板修改,前后端分离。
后端使用fastapi,爬取的数据存入数据库。效果图如下,点击看全屏效果
下面这张是网上下载的vue大屏,我根据它来修改的
修改内容包括:
更换背景大图,形成"暗黑"星空风格
Apache ECharts官网找适合的效果图,并修改
删除词云和中间的飞行地图等,把自己的内容排版进去
数据来源
说明
这里只介绍右边的“降水量预报”。值越大,气球越大
采用scrapy爬取数据
数据爬自weather.cma.cn
定义要爬的url,降水量相加得到某地未来一天的降雨量
运行过程
爬虫脚本
参考 ssw的小型文档网站
后端接口
数据库的爬虫数据
fastapi
接口url:
http://localhost:5000/rain/
脚本:
from fastapi import FastAPI
from fastapi.responses import JSONResponse
import pymysql
app = FastAPI()
def conn_mysql(sql):
dbparam = {
'host': '127.0.0.1',
'port': 3306,
'user': 'root',
'password': '1024',
'database': 'alerts',
'charset': 'utf8'
}
conn = pymysql.connect(**dbparam)
cursor = conn.cursor()
try:
cursor.execute(sql)
res = cursor.fetchall()
except Exception as e:
print('入库失败', e)
conn.rollback()
finally:
cursor.close()
conn.close()
return res
def get_rains_from_db():
sql = 'SELECT city,rain from rains'
res = conn_mysql(sql)
return res
@app.get('/rain')
def rain():
res = get_rains_from_db()
for i in res:
city = i[0].strip()
if (city == '益阳'):
yys = i
elif (city == '永顺'):
xxz = i
elif (city == '长沙'):
css = i
elif (city == '张家界'):
zjjs = i
elif (city == '邵阳市'):
sys = i
elif (city == '株洲'):
zzs = i
elif (city == '常德'):
cds = i
elif (city == '娄底'):
ld = i
return JSONResponse({'data': {'ld': ld, 'css': css, 'sys': sys, 'yys': yys, 'zjjs': zjjs,
'xxz': xxz, 'cds': cds, 'zzs': zzs}})
前端展示
vue部分目录结构
文件已上传,下载地址
.
├── public
│ └── json
│ └── 430000.json
└── src
├── api
│ ├── http.js
│ ├── index.js
│ └── options.js
├── components
│ ├── companySummary
│ │ └── rain.vue
│ └── index.js
├── main.js
├── router
│ └── index.js
└── views
└── alerts.vue
文件说明
router/index.js
编写路由
const routes = [
{
path: '/alerts',
name: 'alerts',
component: () => import('@/views/alerts.vue'),
meta: {
title: '告警'
}
},
]
main.js
导入router/index.js中的路由
导入components/index.js中定义的组件,方便其它文件引用。如 在alerts.vue中写上
<rain />
即可引用
import Vue from 'vue'
import router from './router'
import Vcomp from './components/index' //
Vue.use(Vcomp)
components/index.js
组件在这个文件进行汇总
import rain from './companySummary/rain' //区域雨量
const components = {
rain, //指components/companySummary/rain.vue
}
const Vcomp = {
...components,
install
};
export default Vcomp
components/companySummary/rain.vue
import {mapOptions} from '@/api/options.js'
export default {
name: 'rain',
}
views/alerts.vue
这里引用rain.vue组件
...省略
<div class="panel">
<h2>20小时降水量预报</h2>
<rain />
<div class="panel-footer"></div>
</div>
...省略
api/index.js
向fastapi接口发送请求
export const rainInfo = (params) => {
return axios.get('http://localhost:5000/rain/')
}
api/options.js
向fastapi接口发送请求
mapOptions在rain.vue被引用,被apache echarts使用
$.ajax({
type: "GET",
url: "http://localhost:5000/rain/",
dataType: 'json',
async:false,
success: function (res) {
var xxx = [
{name: '娄底市', value: parseFloat(res.data.ld[1])},
{name: '长沙市', value: parseFloat(res.data.css[1])},
{name: '邵阳市', value: parseFloat(res.data.sys[1])},
{name: '益阳市', value: parseFloat(res.data.yys[1])},
{name: '张家界市', value: parseFloat(res.data.zjjs[1])},
{name: '湘西土家族苗族自治州', value: parseFloat(res.data.xxz[1])},
{name: '常德市', value: parseFloat(res.data.cds[1])},
{name: '株洲市', value: parseFloat(res.data.zzs[1])},
];
}})
export function mapOptions(mapType) {
var geoCoordMap = { //坐标数据
'娄底市':[112.008497,27.728136],
'长沙市':[112.982279,28.19409],
'邵阳市':[111.46923,27.237842],
'益阳市':[112.355042,28.570066],
'张家界市':[110.479921,29.127401],
'湘西土家族苗族自治州':[109.739735,28.314296],
'常德市':[111.691347,29.040225],
'株洲市':[113.151737,27.835806],
};
...省略
}
总结
通过这次尝试,简单实现了大屏效果。条形图、折线图、飞行地图、词云等,还可以去Apache ECharts官网找资源加入到大屏。如果你对threejs很了解,甚至可以把它的3D效果加入进来
有些大屏用html编写,一大段一大段的代码让人失去修改的兴趣,相比来说vue更简洁、代码少、修改快。
本文是由 Python技术 公众号粉丝 SSW 投稿,欢迎大家继续踊跃投稿!
PS:公号内回复「Python」即可进入Python 新手学习交流群,一起 100 天计划!
老规矩,兄弟们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!
【神秘礼包获取方式】
识别文末二维码,回复:1024
边栏推荐
- 暴力破解美团最新JVM面试题:无限执行
- PAT serie a 1137 final grades
- 2022年安全员-A证考试试题及模拟考试
- 5000mAh大电池!华为全新鸿蒙手机今晚亮相:更流畅更安全
- 【 Leetcode string, the string transform/hexadecimal conversion 】 HJ1. The length of the string last word HJ2. Calculation of a certain number of characters appear HJ30. String merging processing
- Qt | 设置部件大小 sizeHint、minimumSizeHint、sizePolicy、stretch factor
- 面试了个阿里P7大佬,他让我见识到什么才是“精通高并发与调优”
- BSC链智能合约模式系统开发功能逻辑分析
- 【Untitled】
- 语音直播系统——做好敏感词汇屏蔽打造绿色社交环境
猜你喜欢
随机推荐
Qt | 关于如何使用事件过滤器 eventFilter
兆骑科创双创服务平台,创业赛事活动,投融资对接平台
如何用JDBC操作Mysql
IDO预售DAPP系统开发(NFT挖矿)
BSC链智能合约模式系统开发功能逻辑分析
5000mAh大电池!华为全新鸿蒙手机今晚亮相:更流畅更安全
Qt | 关于 Qt Creator 打开项目编译不过的问题
管理软件开发 管理软件定制开发流程
开篇-开启全新的.NET现代应用开发体验
数据库三范式
this beta version of Typora is expired, please download and install a newer version.Typora的保姆级最新解决方法
【知乎高赞】为什么很多资质平庸的女人嫁得很好,很多优质女性却成了剩女?
MySQL (2)
继续来学习有关淘宝的API接口的使用——获得店铺的所有商品 API
如何查看微信小程序服务器域名并且修改
Typora永久使用,彻底解决This beta version of Typora is expired.
《数字经济全景白皮书》银行业智能风控科技应用专题分析 发布
XGBoost 和随机森林在表格数据上优于深度学习?
aPaaS低代码平台(二) | 快速构建业务模型
SSRF(服务器端请求伪造)