【我在黑盒学py】如何获取CSGO饰品数据


3楼猫 发布时间:2022-04-14 12:00:30 作者:王守義拾叁香 Language

0x00 写在前面

简单汇报一下最近拾叁香比价平台的开(mo)发(yu)进度,上周末三天爬完了四个平台的全部饰品ID(不包括贴纸等,加上那些肝受不了,实用性也不高),共五万余条数据。整合后数据如下

【我在黑盒学py】如何获取CSGO饰品数据-第0张

四个平台的饰品ID

今天准备给皮肤编号,方便API调用,思路如下

【我在黑盒学py】如何获取CSGO饰品数据-第1张

大编号

具体到每一种武器的每一个皮肤就是这样的:

1    01            001   B      S

刀  鲍伊猎刀  皮肤 略磨 暗金

上面的001这个是根据我这个皮肤在我爬下来的数据里面的位置来定的,崭新到破损分别对应字母A-E,暗金就在末尾加一个S,纪念品就加个J

下面是做测试的时候简单跑了一下

【我在黑盒学py】如何获取CSGO饰品数据-第2张

仅供参考

0x01 理论部分

先大概看看四个平台的饰品Url的结构(以普通崭新九头金蛇作为例子):

A:/goods/871801

B:/product/730/664271

C:/goodInfo?id=62268

D:/csgo/914680597258567680/S.html

不难发现,想要获取饰品信息就需要构造Url,而链接里面最重要的参数便是该饰品对应的ID,并且每个平台皮肤所对应的ID都不一样,那么要做四个平台的联合搜索的话就免不了要把每种皮肤在每个平台上的ID给找出来。像我这样二十岁的男子大学牲,怎么能把宝贵的时间浪费在复制数据这种事情上?陪对象不香?人生苦短,我用Python。

如何获取饰品信息可以参考上一篇学py的帖子,有较为详细的分析:

【我在黑盒学py】CSGO饰品价格监控工具

0x01_1 获取A平台的数据

要批量获取,并且按照种类进行储存的话,饰品平台提供了很贴心的按照武器种类进行筛选的功能,大大方便了脚本的编写。

【我在黑盒学py】如何获取CSGO饰品数据-第3张

分析思路和上一篇帖子差不多,打开控制栏,随便选择一种枪械,分析数据包。

【我在黑盒学py】如何获取CSGO饰品数据-第4张

这个good开头的包很可疑

根据多年的瞎蒙经验,一眼可疑发现这个很特别的good开头的请求,点开看看

【我在黑盒学py】如何获取CSGO饰品数据-第5张

这个items里面东西很多

【我在黑盒学py】如何获取CSGO饰品数据-第6张

找到你了

果然有饰品信息,那么来康康他的请求是什么样的

【我在黑盒学py】如何获取CSGO饰品数据-第7张

首先看看请求Url,可以发现红色框中这三个参数有点意思。第一个框相信只要学过小学英语都能知道这是第一页的意思;第二个就比较有意思了,这个应该是CSGO中鲍伊猎刀对应的id,那么由此可以推断得出想要获取其他种类的皮肤只要得到他对应的这个大类ID即可;最后一个方框这个不难判断是时间戳,毕竟市场都具有时效性嘛,剩下的一些参数填不填都不影响,在构造请求Url的时候可以省略。

先直接get一下这个url看看行不行

【我在黑盒学py】如何获取CSGO饰品数据-第8张

从返回结构可以看出,他需要登录才能请求这个API,那么尝试直接带Cookie请求行不行

【我在黑盒学py】如何获取CSGO饰品数据-第9张

【我在黑盒学py】如何获取CSGO饰品数据-第10张

带上Cookie再次请求就有了

友情提示:对于这种需要Cookie才能请求的API,一定记得加延迟,否则请求太频繁了直接号都给扬了。

稍微分析一下返回的数据,我们需要的是饰品名称,饰品磨损,饰品ID,最后实现在代码中(篇幅问题这里只截图主要部分,详细代码可以在文末下载代码自己看):

【我在黑盒学py】如何获取CSGO饰品数据-第11张

主函数

0x01_2 获取B平台的数据

同上,先打开一个页面进行分析,只有一个孤零零的数据包

【我在黑盒学py】如何获取CSGO饰品数据-第12张

点进去康康,发现是Post请求,那么必然就有提交的数据表单

【我在黑盒学py】如何获取CSGO饰品数据-第13张

找找提交的数据长啥样

【我在黑盒学py】如何获取CSGO饰品数据-第14张

不难发现,最后一行是刀的代码,这里是蝴蝶刀,倒数第三个pageSize是他返回的数据量一次请求返回多少种饰品,可以适当加大这个值,其他的参数信息都不是很重要可以不管。

【我在黑盒学py】如何获取CSGO饰品数据-第15张

这里我们发起一个请求,发现可以成功返回回来数据,但是要注意一点,我们提交的表单数据是Json格式的,所以响应的我们在使用requests模块进行提交数据的时候也应该以json格式提交表单,如下

res = requests.post(url, json=form_data)

通常情况下我们使用post方法提交表单都是这样的

res = requests.post(url, data=form_data)

在这种指定表单格式的API上是必须按照对应格式进行提交的,否则将出现问题

【我在黑盒学py】如何获取CSGO饰品数据-第16张

这里更换了表单格式

由于有pageSize参数,我们在构造表单的时候可以适当加大这个值,以减少请求次数

【我在黑盒学py】如何获取CSGO饰品数据-第17张

原理同8F

0x01_3 获取C平台的数据

有一说一,我以前从来没用过这个平台,第一次打开的时候属实给我惊到了,这什么牛皮癣网站,不知道的还以为是什么菠菜开箱网,也不知道前端在设计的时候在想啥。

老规矩,随便点开一页看看数据包

【我在黑盒学py】如何获取CSGO饰品数据-第18张

非常多

该说不说,他的请求就跟他的页面一样花里胡哨的,非常多,有一定的迷惑性,但是还是能够找到相关的数据包,先来看看请求部分

【我在黑盒学py】如何获取CSGO饰品数据-第19张

这个请求的Url倒是意外的干净,通过尝试不难发现,第一个ctg_id对应的就是他网页上面那一栏武器筛选栏的顺序,比如1就是手枪,2是重型武器,以此类推。第二个type_id也类似,是武器在总的排序中的顺序(不得不说这一点设计倒是和我想到一块儿去了),第三个page_size的参数我试了一下,只能设置为20,改大会报错,不是很能理解他的意义在哪。

由于是get请求,所以我们直接尝试请求这个Url看看结果

【我在黑盒学py】如何获取CSGO饰品数据-第20张

发现返回回来的直接是一个网页,但是里面也有想要的饰品信息(其实是我懒得去看那些奇奇怪怪的请求,发现他的网页也是直接请求来的,索性直接从网页里面找东西)

由于需要处理网页,那么人民群众喜闻乐见的BeautifulSoup就上场了,也没啥难度,主函数贴出来了,不懂可以自己下载代码康康

【我在黑盒学py】如何获取CSGO饰品数据-第21张

主函数

0x01_4 获取D平台的数据

好像这个平台是重庆的一家公司在运营,但是感觉用的人没前面三个多

老规矩,看看数据包

【我在黑盒学py】如何获取CSGO饰品数据-第22张

虽然这家平台的设计理念与上一家的菠菜网站设计理念不谋而合,但是在请求里面就与上一家不一样了,并没有我们想要的东西。那么换个思路,直接Get请求这个网页Url看看行不行

【我在黑盒学py】如何获取CSGO饰品数据-第23张

直接拿下

掘沙!于是和上一家的脚本一样,用BeautifulSoup解析一下就好了,这里直接快进到代码实现

【我在黑盒学py】如何获取CSGO饰品数据-第24张

原理基本和上一家的一样

0x02 小结

通过获取这四大平台的信息,已经初步形成了一个数据库,可以通过名字找到该饰品对应四个平台的id,有的皮肤YYYP和C5没有上架就没有ID,后续会进一步完善。

在编写脚本的时候,获取的皮肤都是以武器类别命名的单独的一个一个的.xlsx文件最后还用到了一个合并数据的小脚本,这里不多赘述,也放在附件里面,感兴趣的话可以自己研究一下,也是非常简单的。

【我在黑盒学py】如何获取CSGO饰品数据-第25张

0x03 附件

由于一些原因,不便放出获取到的数据,仅提供代码。下图中第一个dealcsv就是处理合并数据表格的代码。

【我在黑盒学py】如何获取CSGO饰品数据-第26张

蓝奏云:mrdeng.lanzouj.康姆/igwzs032cz9c

如果觉得本文对你有用的话,就请动动发财的小手来个一键三连叭~

拾叁香比价平台也已经进入到最后的开发阶段了,不出意外的话月底或者下个月初就能正式上线,请紧张的期待!

【我在黑盒学py】如何获取CSGO饰品数据-第27张


© 2022 3楼猫 下载APP 站点地图 广告合作:asmrly666@gmail.com