我用java分析了原神抽卡记录手机h游戏「我用java分析了原神抽卡记录」
起因
我们都知道原神抽卡是有保底机制的,但是游戏里面只能按页查看抽卡记录,并没有各种数据统计,为了能够优化大家的游戏体验,本文就带大家用java爬虫来获取抽卡信息。
抽卡信息api解析
由于我用的是安卓(鸿蒙)手机,所有就介绍安卓获取信息的办法。
对于每一个角色,在游戏内查看记录的时候都会有一个特定的api,我们需要获得这个api。
安卓(鸿蒙)的获取方法是 祈愿->查看历史记录->断网(手动断开手机的网络连接),然后把相应的api下来。
就是上面这个页面,断网后点击右上方橘色框中的按钮,然后就能得到你的查询链接
这个链接看起来是个get请求,将这个链接到浏览器中就可以得到查询页面
大概就是上面这个样子。
现在来详细看一下连接中带有的参数。
为了能看的清晰一点,我把参数都用换行隔开了,如果你要用这个链接对服务器进行请求的话,要把空格删掉。
我们按照传统的爬虫方法区看html标签,会发现,换页标签中并没有包含超链接。
这个时候就要去看网络流信息了,我们打开开发者工具后,点击Network标签页,就能看到网络流。
打开Network标签页然后刷新页面,会得到下列信息,其中包括了页面请求的各种资源,这些都不重要,重要的是我下图选中的请求
这个请求在每次换页的时候都要发一起,现在来看一下该请求的详细参数
对比我们从游戏中获得的原始地址就会发现,他们的参数几乎一致,我把不一致的参数提取取出来,他们分别是
gacha_type=301&
page=1&
size=6&
end_id=0
这个就是我们分页的请求参数啦。
其中gacha_type表示的是卡池信息,游戏中一共提供了4个卡池
四个卡池的对应的数字分别是("新手祈愿",100),("常驻祈愿", 200),("活动祈愿1&2",301 ),("武器祈愿",302)。
page和size就是分页的两个参数,比较容易理解,就不说了。
比较重要的是end_id这个参数,这个参数的值如果为0的话表示从头开始查,如果不为0就从传入的那个id开始,并且一次最多查询20条数据。
下面来看一个具体的请求例子,为了简单期间,我们把请求数量定为2,这样看起来比较直观。
使用java获取数据
有了上面的基础信息,相信你已经胸有成竹了。
在解析之前,需要准备好两个jar包
我们先定义一个实体类,接收接口返回的信息
然后使用一个小案例,解析json,并且将相应信息变成上面的实体类
运行上述代码,就可以发现,我们已经能够解析数据了
接下来要做的事情,就是编写更加复杂的逻辑,具体要做的事情就是,一个主接口,接收玩家的url然后将这个url进行一定处理后请求json数据,将所有数据都爬下来后再进行数据分析,最后返回结果。
首先将接收请求并且解析json的函数做一个封装
接着我们写一个转换url的函数,这个是最基础的转换,将原始的url转换为可以查询json的url
然后我们需要一个主启动函数,调用这个函数就可以把四个卡池都遍历一遍,得到所有的数据
经过测试,我发现,接口中page参数不重要,只需要设置end_id和size就行,当end_id为0的时候,就表示从头开始读数据。
我们需要不断修改end_id知道返回的数据为空为止
最后我们可以针对得到的map进行数据分析
总的代码如下
运行结果
可以看到我抽卡还是挺非的哈哈。当然,在数据处理的部分,我只是做了一个简单的案例,你可以根据你的需求进行其他的分析。如果把这个功能集成到服务器里,就可以做一个提供查询接口的网站或者微信公众号啦,然后可以对所有进行查询的数据进行排名,看看谁是欧皇,谁是非酋。
总结
本文是java爬虫的一个小案例,相信可以给你提供帮助。
德清版权声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com