返回

原神抽卡记录如何爬取?实际例子一键导出记录!

前端

作为一款深受全球玩家喜爱的游戏,原神凭借其精美的画面、丰富的剧情和多样化的玩法吸引了无数玩家。而在原神的游戏中,抽卡无疑是玩家们最为关注的环节之一。如何提高抽卡效率,如何了解自己的抽卡规律,如何计算下一次保底的距离,这些都是困扰着广大玩家的问题。

本着技术服务生活的理念,我决定自制一个网页,用于获取原神的抽卡数据,并将其以更加清晰的统计图和扇形图的形式展示出来,帮助玩家们更加直观地了解自己的抽卡情况和规律。

准备工作

在开始爬取原神抽卡记录之前,我们需要先做好一些准备工作:

  1. 安装Python及其相关库。
  2. 获取原神的游戏数据。
  3. 搭建一个简单的Web服务器。

爬取原神抽卡记录

获取原神的游戏数据有多种方法,最简单的方法是使用米哈游官方提供的原神数据接口。该接口可以提供玩家的抽卡记录、角色信息、武器信息等多种数据。

import requests

# 设置原神数据接口的URL
url = "https://api.genshin.mihoyo.com/gacha_log/api/getGachaLog"

# 设置请求头,模拟浏览器行为
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
}

# 发起请求,获取抽卡记录
response = requests.get(url, headers=headers)

# 解析响应数据,提取抽卡记录
gacha_log = response.json()["data"]["list"]

数据分析和可视化展示

获取到抽卡记录后,我们可以对其进行分析和可视化展示。例如,我们可以统计玩家的总抽卡次数、每次抽卡的出货频率、下一次保底的距离等信息。我们还可以将这些数据以统计图和扇形图的形式展示出来,帮助玩家更加直观地了解自己的抽卡情况和规律。

import matplotlib.pyplot as plt

# 统计玩家的总抽卡次数
total_gacha_count = len(gacha_log)

# 统计每次抽卡的出货频率
gacha_success_count = 0
for gacha in gacha_log:
    if gacha["item_type"] == "角色":
        gacha_success_count += 1

gacha_success_rate = gacha_success_count / total_gacha_count

# 统计下一次保底的距离
next_guaranteed_gacha_count = 90 - gacha_success_count

# 将数据以统计图和扇形图的形式展示出来
plt.bar("总抽卡次数", total_gacha_count)
plt.bar("出货频率", gacha_success_rate)
plt.bar("下一次保底距离", next_guaranteed_gacha_count)

plt.pie([total_gacha_count, gacha_success_count, next_guaranteed_gacha_count], labels=["总抽卡次数", "出货频率", "下一次保底距离"])

plt.show()

Web开发

为了方便玩家使用,我们可以将爬取、分析和展示的功能集成到一个简单的Web页面中。该页面可以提供玩家登录、查询抽卡记录、查看统计图和扇形图等功能。

<!DOCTYPE html>
<html>
<head>
    
</head>
<body>
    <form action="gacha_log.php" method="post">
        <input type="text" name="username" placeholder="玩家账号">
        <input type="password" name="password" placeholder="玩家密码">
        <input type="submit" value="查询">
    </form>

    <?php
    if (isset($_POST["username"]) && isset($_POST["password"])) {
        $username = $_POST["username"];
        $password = $_POST["password"];

        // 使用米哈游官方提供的原神数据接口获取抽卡记录
        $url = "https://api.genshin.mihoyo.com/gacha_log/api/getGachaLog";
        $headers = [
            "User-Agent" => "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
        ];
        $data = [
            "uid" => $username,
            "region" => "os_asia",
            "lang" => "zh-cn",
        ];

        $response = requests.post($url, headers=headers, data=data);
        $gacha_log = $response->json()["data"]["list"];

        // 对抽卡记录进行分析和可视化展示
        $total_gacha_count = count($gacha_log);
        $gacha_success_count = 0;
        for ($i = 0; $i < $total_gacha_count; $i++) {
            if ($gacha_log[$i]["item_type"] == "角色") {
                $gacha_success_count++;
            }
        }
        $gacha_success_rate = $gacha_success_count / $total_gacha_count;
        $next_guaranteed_gacha_count = 90 - $gacha_success_count;

        // 将数据以统计图和扇形图的形式展示出来
        echo "<div style='width: 50%; float: left;'>";
        echo "<h3>统计图</h3>";
        echo "<canvas id='barChart' width='400' height='300'></canvas>";
        echo "</div>";

        echo "<div style='width: 50%; float: right;'>";
        echo "<h3>扇形图</h3>";
        echo "<canvas id='pieChart' width='400' height='300'></canvas>";
        echo "</div>";

        echo "<script>";
        echo "var barChart = new Chart(document.getElementById('barChart'), {
            type: 'bar',
            data: {
                labels: ['总抽卡次数', '出货频率', '下一次保底距离'],
                datasets: [{
                    label: '抽卡记录',
                    data: [$total_gacha_count, $gacha_success_rate, $next_guaranteed_gacha_count]
                }]
            },
            options: {
                scales: {
                    yAxes: [{
                        ticks: {
                            beginAtZero: true
                        }
                    }]
                }
            }
        });";

        echo "var pieChart = new Chart(document.getElementById('pieChart'), {
            type: 'pie',
            data: {
                labels: ['总抽卡次数', '出货频率', '下一次保底距离'],
                datasets: [{
                    data: [$total_gacha_count, $gacha_success_rate, $next_guaranteed_gacha_count]
                }]
            },
            options: {
                responsive: true,
                legend: {
                    position: 'bottom'
                }
            }
        });";
        echo "</script>";
    }
    ?>
</body>
</html>

结语

通过本教程,您将学会如何使用Python爬虫技术从原神游戏中导出抽卡记录,并将其以更加清晰的统计图和扇形图的形式展示出来。希望本教程能够帮助您更好地了解自己的抽卡情况和规律,从而提高抽卡效率。