当前位置:   article > 正文

【17】数据可视化+爬虫:基于 Echarts + Python 实现的动态实时大屏范例 - 行业搜索指数排行榜_python可视化驾驶舱

python可视化驾驶舱

目录

❤️效果展示❤️

1、首先看动态效果图 

2、丰富的主题样式

一、 确定需求方案

1、确定产品上线部署的屏幕LED分辨率

2、功能模块

3、部署方式 

二、整体架构设计

三、爬虫采集关键编码实现

1、确定爬虫目标

2、确认每个模块的url请求及参数

 3、编写爬虫采集数据

四、数据可视化关键编码实现 

1、前端html代码 

2、前端JS代码

3、后端python服务器代码

五、上线运行

六、源码下载

七、精彩案例汇总


写在前面,最近收到了很多小伙伴们的建议,大屏得展示数据如果采用真实数据分析计算,那就更加贴近小伙伴们的实际工作场景,可以很快在工作中应用,所以应小伙伴需求,就诞生了这篇数据可视化+爬虫。

近年来,数据可视化大屏的出现,掀起一番又一番的浪潮,众多企业主纷纷想要打造属于自己的 “酷炫吊炸天” 的霸道总裁大屏驾驶舱。今天为大家分享的是 【 行业搜索指数排行榜- 数据可视化大屏解决方案】。

之前小伙伴们建议我出一些视频课程来学习Echarts,这样可以更快上手,所以我就追星赶月的录制了《Echart-0基础入门》系列课程(共14节课) ,希望小伙伴们多多支持。

❤️效果展示❤️

1、首先看动态效果图 

2、丰富的主题样式

  

一、 确定需求方案

1、确定产品上线部署的屏幕LED分辨率

1280px*768px,F11全屏后占满整屏无滚动条;其它分辨率屏幕可自适应显示。

2、功能模块

  • 汽车行业排行榜单

  • 手机行业排行榜单

  • 化妆品行业排行榜单

  • 旅游景点行业排行

  • 高校行业排行

  • 房产行业排行

3、部署方式 

  • 基于免安装可执行程序:支持Windows、Linux、Mac等各种主流操作系统;将可执行程序exe复制到服务器上即可,无需其它环境依赖;
  • 观看方式:既可在服务器上直接观看程序界面,也可远程使用浏览器打开播放,支持Chrome浏览器、360浏览器等主流浏览器。

二、整体架构设计

  1. 前端基于Echarts开源库设计,使用WebStorm编辑器;
  2. 后端基于Python Web实现,使用Pycharm编辑器;
  3. 数据传输格式:JSON;
  4. 数据源类型:本案例采用python request 采集实时数据方式。实际开发需求中,支持定制HTTP API接口方式或其它各种类型数据库,如PostgreSQL、MySQL、Oracle、Microsoft SQL Server、SQLite、Excel表格等。
  5. 数据更新方式:本案例为了展示数据,采用定时拉取方式。实际开发需求中,采用后端数据实时更新,实时推送到前端展示;

三、爬虫采集关键编码实现

1、确定爬虫目标

本次采集目标为百度行业排行。打开网址 百度指数 页面如图所示:

2、确认每个模块的url请求及参数

F12打开浏览器调试,定位url

接下来确认请求参数: 

 3、编写爬虫采集数据

  1. def scrapy(url, cookie):
  2. headers = {
  3. "Content-Type": 'application/json;charset=utf-8',
  4. "cookie": cookie,
  5. "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36"
  6. }
  7. result_obj = {}
  8. try:
  9. response = requests.get(url=url, headers=headers, verify=False)
  10. result_obj = json.loads(response.text)
  11. except Exception as e:
  12. print(e)
  13. if 0 == result_obj['status']:
  14. return result_obj["data"]["results"]["current"]
  15. else:
  16. result_obj['status'] = 'error'
  17. return result_obj

 这里需要cookie,只是一次性测试那么简单的操作从浏览器中取出来。如果是规模性的功能开发,那么要采取自动登录,自动获取cookie的方式。本篇采用第一种方式测试。

由于这里的网址是https,是不安全的链接访问,所以request.get的verify参数需要设置为False,否则请求失败。

至此,爬虫部分基本完成。

四、数据可视化关键编码实现 

1、前端html代码 

  1. <body style="background-color:#000">
  2. <div class="container_fluid">
  3. <div class="row_fluid" id="vue_app">
  4. <div class="col-xs-12 col-md-12" style="padding:0 0;">
  5. <h3 style="color:hsl(200, 86%, 48%); text-align: center" id="container_0">
  6. <strong></strong>
  7. </h3>
  8. <dv-decoration-5 style="width:100%;height:4%;color:hsl(200, 86%, 48%);">
  9. </dv-decoration-5>
  10. </div>
  11. <div class="col-xs-12 col-md-2" style="padding:0 0;">
  12. <div style="height:15%; padding:0%;">
  13. <dv-border-box-7>
  14. <p style='padding:2%; color:hsl(200, 86%, 48%); font-size: 12; font-weight: bolder;'>
  15. 汽车行业最高指数
  16. <img src="myimg/1.png" style="height: 25%; ">
  17. </p>
  18. <p id="container_1_6"
  19. style='padding:0%; color:rgba(255, 255, 255, 0.9); font-size: 28; font-weight: bolder; text-align: center;'>
  20. 112222</p>
  21. </dv-border-box-7>
  22. </div>
  23. </div>
  24. <div class="col-xs-12 col-md-2" style="padding:0 0;">
  25. <div style="height:15%; padding:1%;">
  26. <dv-border-box-7>
  27. <p style='padding:2%; color:hsl(200, 86%, 48%); font-size: 12; font-weight: bolder;'>
  28. 化妆品行业最高指数
  29. <img src="myimg/2.png" style="height: 25%; ">
  30. </p>
  31. <p id="container_1_7"
  32. style='padding:0%; color:rgba(255,255,255,.9); font-size: 28; font-weight: bolder; text-align: center;'>
  33. 112222</p>
  34. </dv-border-box-7>
  35. </div>
  36. </div>
  37. <div class="col-xs-12 col-md-2" style="padding:0 0;">
  38. <div style="height:15%; padding:1%;">
  39. <dv-border-box-7>
  40. <p style='padding:2%; color:hsl(200, 86%, 48%); font-size: 12; font-weight: bolder;'>
  41. 旅游行业最高指数
  42. <img src="myimg/3.png" style="height: 25%; ">
  43. </p>
  44. <p id="container_1_8"
  45. style='padding:0%; color:rgba(255,255,255,.9); font-size: 28; font-weight: bolder; text-align: center;'>
  46. 112222</p>
  47. </dv-border-box-7>
  48. </div>
  49. </div>
  50. <div class="col-xs-12 col-md-2" style="padding:0 0;">
  51. <div style="height:15%; padding:1%;">
  52. <dv-border-box-7>
  53. <p style='padding:2%; color:hsl(200, 86%, 48%); font-size: 12; font-weight: bolder;'>
  54. 手机行业最高指数
  55. <img src="myimg/4.png" style="height: 25%; ">
  56. </p>
  57. <p id="container_1_9"
  58. style='padding:0%; color:rgba(255,255,255,.9); font-size: 28; font-weight: bolder; text-align: center;'>
  59. 112222</p>
  60. </dv-border-box-7>
  61. </div>
  62. </div>
  63. <div class="col-xs-12 col-md-2" style="padding:0 0;">
  64. <div style="height:15%; padding:1%;">
  65. <dv-border-box-7>
  66. <p style='padding:2%; color:hsl(200, 86%, 48%); font-size: 12; font-weight: bolder;'>
  67. 高校行业最高指数
  68. <img src="myimg/4.png" style="height: 25%; ">
  69. </p>
  70. <p id="container_1_10"
  71. style='padding:0%; color:rgba(255,255,255,.9); font-size: 28; font-weight: bolder; text-align: center;'>
  72. 112222</p>
  73. </dv-border-box-7>
  74. </div>
  75. </div>
  76. <div class="col-xs-12 col-md-2" style="padding:0 0;">
  77. <div style="height:15%; padding:1%;">
  78. <dv-border-box-7>
  79. <p style='padding:2%; color:hsl(200, 86%, 48%); font-size: 12; font-weight: bolder;'>
  80. 房产行业最高指数
  81. <img src="myimg/4.png" style="height: 25%; ">
  82. </p>
  83. <p id="container_1_11"
  84. style='padding:0%; color:rgba(255,255,255,.9); font-size: 28; font-weight: bolder; text-align: center;'>
  85. 112222</p>
  86. </dv-border-box-7>
  87. </div>
  88. </div>
  89. <div class="col-xs-12 col-md-5" style="padding:0 0; height:75%;">
  90. <dv-border-box-1>
  91. <div style="padding:3%; height:100%;" id="container_5"></div>
  92. </dv-border-box-1>
  93. </div>
  94. <div class="col-xs-12 col-md-4" style="padding:0 0.3%;height:25%;">
  95. <dv-border-box-1>
  96. <div style="padding:3%; height:100%" id="container_6">
  97. </div>
  98. </dv-border-box-1>
  99. </div>
  100. <div class="col-xs-12 col-md-3" style="padding:0 0.3%;height:25%;">
  101. <dv-border-box-1>
  102. <div style="padding:3%; height:100%" id="container_7">
  103. </div>
  104. </dv-border-box-1>
  105. </div>
  106. <div class="col-xs-12 col-md-4" style="padding:0 0.3%;height:25%;">
  107. <dv-border-box-1>
  108. <div style="padding:3%; height:100%" id="container_8">
  109. </div>
  110. </dv-border-box-1>
  111. </div>
  112. <div class="col-xs-12 col-md-3" style="padding:0 0.3%;height:25%;">
  113. <dv-border-box-1>
  114. <div style="padding:3%; height:100%" id="container_9">
  115. </div>
  116. </dv-border-box-1>
  117. </div>
  118. <div class="col-xs-12 col-md-4" style="padding:0 0.3%;height:25%;">
  119. <dv-border-box-1>
  120. <div style="padding:3%; height:100%" id="container_10">
  121. </div>
  122. </dv-border-box-1>
  123. </div>
  124. <div class="col-xs-12 col-md-3" style="padding:0 0.3%;height:25%;">
  125. <dv-border-box-1>
  126. <div style="padding:3%; height:100%" id="container_11">
  127. </div>
  128. </dv-border-box-1>
  129. </div>
  130. </div>
  131. </div>

2、前端JS代码

  1. var idContainer_5 = "container_5";
  2. var chartDom = document.getElementById(idContainer_5);
  3. var myChart = echarts.init(chartDom, window.gTheme);
  4. var option;
  5. option = {
  6. title: {
  7. text: "全行业排行榜单",
  8. left: "left",
  9. textStyle: {
  10. color: "hsl(200, 86%, 48%)",
  11. fontSize: "10",
  12. },
  13. },
  14. tooltip: {
  15. trigger: 'item',
  16. formatter: '{a} <br/>{b} : {c} '
  17. },
  18. legend: {
  19. top: "10%",
  20. itemWidth: 20,
  21. itemHeight: 10,
  22. orient: 'vertical',
  23. left: 'right',
  24. textStyle: {
  25. color: "rgba(255,255,255,.5)",
  26. fontSize: "10",
  27. },
  28. },
  29. series: [
  30. {
  31. name:'热点指数',
  32. data: [],
  33. type: 'wordCloud',
  34. // shape: 'circle', //circle cardioid diamond triangle-forward triangle
  35. sizeRange: [20, 62], //word的字体大小区间,单位像素
  36. // rotationRange: [-90, 90], //word的可旋转角度区间
  37. showBackground: true,
  38. backgroundStyle: {
  39. color: "rgba(180, 180, 180, 0.1)",
  40. },
  41. label: { show: false }
  42. },
  43. ],
  44. };
  45. option && myChart.setOption(option);
  46. myChart.setOption(option);
  47. window.addEventListener("resize", function () {
  48. myChart.resize();
  49. });
  50. function asyncData_5() {
  51. $.getJSON("json/5.json").done(function (data) {
  52. console.log(data);
  53. var myChart = echarts.init(document.getElementById(idContainer_5));
  54. myChart.setOption({
  55. series: [{data: data}],
  56. });
  57. });
  58. }
  59. asyncData_5();

3、后端python服务器代码

  1. class MyRequestHandler(SimpleHTTPRequestHandler):
  2. protocol_version = "HTTP/1.0"
  3. server_version = "PSHS/0.1"
  4. sys_version = "Python/3.7.x"
  5. target = "./" # 监听目录,配置项
  6. def do_GET(self):
  7. url = ""
  8. data = []
  9. randomDateType = ['&dateType=20210711~20210717', '&dateType=20210811~20210817', '&dateType=20210911~20210917', '&dateType=20211011~20211017']
  10. dateType = randomDateType[random.randint(0,3)]
  11. if self.path.find("/json/5.json") >= 0:
  12. for k in baidu_data:
  13. data.extend(scrapyBaidu.filter_pie_data(baidu_data[k]))
  14. // 其他链接同上
  15. else:
  16. SimpleHTTPRequestHandler.do_GET(self);
  17. return
  18. self.send_response(200)
  19. self.send_header("Content-type", "json")
  20. self.end_headers()
  21. rspstr = json.dumps(data)
  22. self.wfile.write(rspstr.encode("utf-8"))
  23. def do_POST(self):
  24. data = self.rfile.read(int(self.headers["content-length"]))
  25. data = json.loads(data)
  26. self.send_response(200)
  27. self.send_header("Content-type", "text/html")
  28. self.end_headers()
  29. rspstr = json.dumps(data, ensure_ascii=False)
  30. self.wfile.write(rspstr.encode("utf-8"))
  31. def HttpServer():
  32. try:
  33. server = HTTPServer((ip, port), MyRequestHandler)
  34. listen = "http://%s:%d" %(ip, port)
  35. print("服务器监听地址: ", listen)
  36. server.serve_forever()
  37. except ValueError as e:
  38. print("Exception", e)
  39. server.socket.close()
  40. if __name__ == "__main__":
  41. HttpServer()

五、上线运行

六、源码下载

17【源码】数据可视化:基于Echarts+Python实现的动态实时大屏范例(含爬虫代码).zip-企业管理文档类资源-CSDN下载

本次分享结束,欢迎讨论!QQ微信同号: 6550523

七、精彩案例汇总

请抬起你可爱的小手戳戳戳:❤️数据可视化《精彩案例汇总》❤️_小魔怪的博客-CSDN博客

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/399782
推荐阅读
相关标签
  

闽ICP备14008679号