使用Puppeteer进行游戏数据可视化

news2024/11/18 6:04:20

亿牛云代理

导语

Puppeteer是一个基于Node.js的库,可以用来控制Chrome或Chromium浏览器,实现网页操作、截图、测试、爬虫等功能。本文将介绍如何使用Puppeteer进行游戏数据的爬取和可视化,以《英雄联盟》为例。

概述

《英雄联盟》是一款由Riot Games开发和运营的多人在线竞技游戏,拥有数亿玩家和观众。游戏中有超过150种不同的英雄,每个英雄都有自己的特点和技能。为了了解每个英雄的热度和胜率,我们可以使用Puppeteer爬取官方网站上的数据,并用ECharts进行可视化。

正文

要使用Puppeteer进行爬虫,我们需要先安装Node.js和Puppeteer库。然后,我们可以编写一个JavaScript文件,比如叫做spider.js,用来实现以下步骤:

  • 引入Puppeteer和ECharts模块
  • 创建一个浏览器实例,并设置代理IP和认证信息,以提高爬虫效果
  • 打开一个新的页面,并设置视口大小
  • 访问《英雄联盟》官方网站上的英雄列表页面
  • 等待页面加载完成,并获取所有英雄的名称、热度和胜率
  • 将数据保存到一个数组中,并按照热度排序
  • 创建一个HTML文件,用来显示数据可视化的结果
  • 使用ECharts生成一个散点图,横轴为热度,纵轴为胜率,每个点代表一个英雄,并显示其名称
  • 将散点图插入到HTML文件中,并保存
  • 关闭浏览器实例

案例

下面是spider.js的代码示例,以及相应的中文注释:

// 引入Puppeteer和ECharts模块
const puppeteer = require('puppeteer');
const echarts = require('echarts');

// 创建一个浏览器实例,并设置代理IP
// 具体参考亿牛云爬虫代理的域名、端口、用户名、密码
const browser = await puppeteer.launch({
  args: [
    '--proxy-server=http://16YUN:16IP@www.16yun.cn:8800'
  ]
});

// 打开一个新的页面,并设置视口大小
const page = await browser.newPage();
await page.setViewport({width: 1280, height: 800});

// 访问《英雄联盟》官方网站上的英雄列表页面
await page.goto('https://lol.qq.com/data/info-heros.shtml');

// 等待页面加载完成,并获取所有英雄的名称、热度和胜率
await page.waitForSelector('.data_list');
const data = await page.evaluate(() => {
  // 获取所有英雄的元素
  const heroes = document.querySelectorAll('.data_list li');
  // 创建一个空数组,用来存放数据
  const result = [];
  // 遍历每个英雄元素,获取其名称、热度和胜率,并添加到数组中
  for (let hero of heroes) {
    const name = hero.querySelector('.name').innerText;
    const hot = parseFloat(hero.querySelector('.hot').innerText);
    const winRate = parseFloat(hero.querySelector('.win-rate').innerText);
    result.push({name, hot, winRate});
  }
  // 返回数组
  return result;
});

// 将数据保存到一个数组中,并按照热度排序
const sortedData = data.sort((a, b) => b.hot - a.hot);

// 创建一个HTML文件,用来显示数据可视化的结果
const fs = require('fs');
const html = `
<html>
<head>
  <meta charset="UTF-8">
  <title>英雄联盟英雄数据可视化</title>
  <!-- 引入ECharts的CDN链接 -->
  <script src="https://cdn.bootcdn.net/ajax/libs/echarts/5.1.2/echarts.min.js"></script>
</head>
<body>
  <!-- 创建一个div元素,用来放置散点图 -->
  <div id="chart" style="width: 800px; height: 600px;"></div>
  <!-- 创建一个script元素,用来生成散点图 -->
  <script>
    // 获取div元素
    const chart = document.getElementById('chart');
    // 初始化ECharts实例
    const myChart = echarts.init(chart);
    // 设置散点图的选项
    const option = {
      title: {
        text: '英雄联盟英雄数据可视化'
      },
      tooltip: {
        trigger: 'item',
        formatter: function (params) {
          // 显示英雄的名称、热度和胜率
          return params.data[2] + '<br>热度:' + params.data[0] + '%<br>胜率:' + params.data[1] + '%';
        }
      },
      xAxis: {
        name: '热度(%)',
        min: 0,
        max: 100
      },
      yAxis: {
        name: '胜率(%)',
        min: 40,
        max: 60
      },
      series: [{
        type: 'scatter',
        symbolSize: 10,
        data: [
          // 将数据转换为散点图所需的格式
          // 每个点的数据为[热度, 胜率, 名称]
          ${sortedData.map(item => `[${item.hot}, ${item.winRate}, '${item.name}']`).join(',\n')}
        ]
      }]
    };
    // 设置散点图的选项
    myChart.setOption(option);
  </script>
</body>
</html>
`;

// 将HTML文件保存到本地
fs.writeFileSync('result.html', html);

// 关闭浏览器实例
await browser.close();

结语

通过上面的代码,我们可以使用Puppeteer进行游戏数据的爬取和可视化,得到一个类似于下图的结果。我们可以从中发现一些有趣的现象,比如热度和胜率之间的关系,以及哪些英雄是最受欢迎或者最强势的。当然,这只是一个简单的示例,我们还可以根据自己的需求和兴趣,对不同的网站和数据进行爬取和分析,发现更多的有价值的信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/972234.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Axure RP PC电商平台Web端交互原型模板

Axure RP PC电商平台Web端交互原型模板。原型图内容齐全&#xff0c;包含了用户中心、会员中心、优惠券、积分、互动社区、运营推广、内容推荐、商品展示、订单流程、订单管理、售后及服务等完整的电商体系功能架构和业务流程。 在设计尺寸方面&#xff0c;本套模板按照主流的…

Qt中布局管理使用总结

目录 1. 五大布局 1.1 QVBoxLayout垂直布局 1.2 QHBoxLayout水平布局 1.3 QGridLayout网格布局 1.4 QFormLayout表单布局 1.5 QStackedLayout分组布局 1.6 五大布局综合应用 2. 分割窗口 3. 滚动区域 4. 停靠区域 1. 五大布局 1.1 QVBoxLayout垂直布局 #include <…

关于el-input和el-select宽度不一致问题解决

1. 情景一 单列布局 对于上图这种情况&#xff0c;只需要给el-select加上style"width: 100%"即可&#xff0c;如下&#xff1a; <el-select v-model"fjForm.region" placeholder"请选择阀门类型" style"width: 100%"><el-o…

Ubuntu 20.04 网卡命名规则

Ubuntu 系统中网卡的命名规则是&#xff1a;Consistent Network Device Naming&#xff08;一致网络设备命名&#xff09;规范。这个规范的原理是根据固件、拓扑和位置信息分配固定名称。其中&#xff0c;设备类型 en 代表 Ethernet (以太网)&#xff0c;wl 代表 WLAN&#xff…

FPGA实现电机转速PID控制

通过纯RTL实现电机转速PID控制&#xff0c;包括电机编码器值读取&#xff0c;电机速度、正反转控制&#xff0c;PID算法&#xff0c;卡尔曼滤波&#xff0c;最终实现对电机速度进行控制&#xff0c;使其能够渐近设定的编码器目标值。 一、设计思路 前面通过SOPC之NIOS Ⅱ实现电…

Python 快速输出接下来几个月的月末日期

# pip install arrow 安装库&#xff08;若已安装 可忽略&#xff09; import arrowEnd_of_month_date [] # 月末日期 for i in range(100):if arrow.now().shift(daysi).format(YYYY-MM-DD)[-2:] 01: # 若日期为 1 号 则返回前一天的日期End_of_month_date.append(arrow.now…

C# winform控件和对象双向数据绑定

实现目的&#xff1a; 控件和对象双向数据绑定 实现结果&#xff1a; 1. 对象值 -> 控件值 2. 控件值 -> 对象值 using System; using System.Windows.Forms;namespace ControlDataBind {public partial class MainForm : Form{People people new People();public Mai…

尚硅谷大数据项目《在线教育之离线数仓》笔记006

视频地址&#xff1a;尚硅谷大数据项目《在线教育之离线数仓》_哔哩哔哩_bilibili 目录 第11章 数仓开发之ADS层 P087 P088 P089 P090 P091 P092 P093 P094 P095 P096 P097 P098 P099 P100 P101 P102 P103 P104 P105 P106 P107 P108 P109 P110 P111 …

RK开发板的USB连接(Ubuntu)

一、安装连接工具 sudo apt-get install putty 二、启动putty工具 sudo putty 三、连接usb&#xff0c;并查看相关的信息 # 查看接入的是否有usb ls /dev/tty* 显示如下&#xff1a;&#xff08;含有usb接口&#xff1a; /dev/ttyUSB0&#xff09; /dev/tty /dev/tty23 /d…

浏览器跨标签通信

写在前面 今天说一下跨标签通信的一种实现方式&#xff0c;首先跨标签指的是同一个浏览器中不同标签之间进行数据通信&#xff0c;也就是说比如在第一个标签写了一个数据&#xff0c;在另一个标签里面进行数据的使用&#xff0c;而且是实时的 先说现象 当我点击发送消息给标签二…

深度学习:基于循环神经网络RNN实现语句生成

目录 1 循环神经网络介绍 1.1 什么是循环神经网络 1.2 RNN的网络结构 1.3 RNN的工作原理 ​编辑 1.4 RNN的应用场景 2 基于RNN实现语句生成 2.1 句子生成介绍 2.2 基于pytorch实现语句生成 2.3 完整代码 2.4 该模型的局限 3 总结 1 循环神经网络介绍 1.1 什么是循环…

【rar密码】rar压缩包密码忘记了,如何解密?

Rar压缩包设置了加密&#xff0c;在解压、修改密码等操作时都需要输入正确的密码。忘记了密码就很麻烦了&#xff0c;如果真的忘记密码&#xff0c;唯一的方法就是找回密码了。 我们自己想要找回密码&#xff0c;最直接简单的就是自己尝试密码。如果压缩包密码是自己设置的&am…

IDEA报错:Plugin ‘org.springframework.boot:spring-boot-maven-plugin:‘ not found

问题&#xff1a; 使用IDEA新建spring boot项目&#xff0c;报错如下&#xff1a; Plugin org.springframework.boot:spring-boot-maven-plugin: not found解决办法&#xff1a; 1.在本地maven仓库中找到spring-boot-maven-plugin的版本号 2.在pom.xml文件中添加对应的版本…

ubuntu 22.04安装cuda、cudnn、conda、pytorch

1、cuda 视频连接 https://www.bilibili.com/video/BV1bW4y197Mo/?spm_id_from333.999.0.0&vd_source3b42b36e44d271f58e90f86679d77db7cuda 11.8 https://developer.nvidia.com/cuda-toolkit-archive点击进入 https://developer.nvidia.com/cuda-11-8-0-download-arc…

win10安装vmware17 pro和centos7及配置

1.下载地址 https://www.bear20.com/pcwin/153/725878653.htmlhttps://www.ittel.cn/archives/12099.html #以下许可证 选择其一即可 4A4RR-813DK-M81A9-4U35H-06KND NZ4RR-FTK5H-H81C1-Q30QH-1V2LA JU090-6039P-08409-8J0QH-2YR7F 4Y09U-AJK97-089Z0-A3054-83KLA 4C21U-2KK9Q-…

Vue-router路由

配置路由 相当于SpringMVC的Controller 路径然后&#xff0c;跳转到对应的组件 一键生成前端项目文档

虹科方案 | 利用扩展型 NAS 存储加速 AI/ML 工作负载

一、AI&ML变革日常生活 AI&#xff08;人工智能&#xff09;和ML&#xff08;机器学习&#xff09;的发展正逐渐渗透到我们的日常生活中&#xff0c;为我们带来了翻天覆地的变化。从智能手机中的语音助手到智能家居设备&#xff0c;AI的应用让我们的生活更加便捷和智能化。…

UWB高精度定位系统源码 UWB室内定位技术 工作考勤、电子围栏、历史轨迹回放、巡检巡查

现代制造业厂区面积大、人员数量多、物资设备不断增加&#xff0c;随着工业信息化技术的发展&#xff0c;大型制造企业中对人员、车辆、物资的管理要求越来越细致。 智慧工厂高精度定位管理系统使用UWB室内定位技术&#xff0c;通过在厂区安装定位基站&#xff0c;为人员或设备…

Spring Boot 整合 Shiro(后端)

1 Shiro 什么是 Shiro 官网&#xff1a; http://shiro.apache.org/ 是一款主流的 Java 安全框架&#xff0c;不依赖任何容器&#xff0c;可以运行在 Java SE 和 Java EE 项目中&#xff0c;它的主要作用是对访问系统的用户进行身份认证、 授权、会话管理、加密等操作。 …

【juc】ReentrantReadWriteLock之缓存(仅当学习)

目录 一、说明二、代码示例2.1 pom依赖2.2 示例代码2.3 实体类 三、示例截图 一、说明 1.针对于读多写少的情况 2.先查缓存&#xff0c;没有再去查库 二、代码示例 2.1 pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"h…