大家好,我是你们的老朋友------南枫,今天我们一起来学习一下该如何抓取大家经常玩的游戏------王者荣耀里面的所有英雄的皮肤。
![](https://img-blog.csdnimg.cn/img_convert/f46616098e7f72d0d0e503e18232da07.png)
老规矩,直接上代码:
导入我们需要使用到的,也是唯一用到的库:
![](https://img-blog.csdnimg.cn/img_convert/d54668b554185d723d6736ac6a1683fc.png)
我们要抓取皮肤其实就是相当于抓图片,那么像这种大网站,大批量的图片它基本上是在一个文件里面,那么我们首要目的就是要找到这个文件所在地,打开浏览器调试面板,进行刷新。
![](https://img-blog.csdnimg.cn/img_convert/09da7979711de8f409cfd0d572d7de24.png)
刷新之后在XHR中会出现很多文件,那么我们所有皮肤图片的地址是在哪呢?在哪个文件中呢?有些人可能会老老实实的一个个去找,那么我教大家一个邪术,当然并不适用所有的网站哈。
我们要抓取所有英雄的皮肤图片,英雄的英文单词叫啥?Hero,大批量是不是要用列表装起来?那么连起来不就是herolist?我们可以去找一下有没有herolist这么一个文件夹。
![](https://img-blog.csdnimg.cn/img_convert/8e6b60a019bfd4dd778373bc7c1375e6.png)
可以发现的是,有这么一个文件夹,那么我们秉持着良好的学习探究精神点击进去查看一下,看看到底有没有对应的数据。
![](https://img-blog.csdnimg.cn/img_convert/39c3ca60f0e110d785327ec53fad73a4.png)
有明显的数据集,继续下去!
![](https://img-blog.csdnimg.cn/img_convert/dfe31de3ab7150aa4e4db29c2cc43c01.png)
有些人看到这玩意就懵逼了,这啥啊?这不都乱码了嘛,不要慌,不要急,咱慢慢来,看看数据有没有规律。
![](https://img-blog.csdnimg.cn/img_convert/b2cfe100bfe219b9e9428620ffce8279.png)
![](https://img-blog.csdnimg.cn/img_convert/5111b3097979d109899bb7df81e1845c.png)
![](https://img-blog.csdnimg.cn/img_convert/f462f9cc749fc13f9fa5d1ab1f8c17fe.png)
可以发现的是,他这个ename是在一个一个的增加。我们先保持怀疑态度,他到底与我们的项目有没有关系,继续去找下一个特征,先暂且搁置一边。
我们要抓取的是一张张大图,也就是高清无码的皮肤图片,比如这样:
![](https://img-blog.csdnimg.cn/img_convert/f462f9cc749fc13f9fa5d1ab1f8c17fe.png)
但我们放大仔细看发现,这个并不是我们的目标,因为它并不是最大,最高清的,那么到底在哪呢?继续使用邪术!!!高清无码图片,不就是大图片嘛?大的英文单词是啥?Big啊!!!那有没有这么个文件呢?
![](https://img-blog.csdnimg.cn/img_convert/07e8017fd23a6fbf8e4ef298f3ac712c.png)
这不是在图片这块有嘛?我们双击打开看看
![](https://img-blog.csdnimg.cn/img_convert/e3c130f6ebd2d34286f56a2e4a5b11b3.png)
唉,非常明显的高清无码大图片了吧,但仔细想想,我现在只是抓到了一张而已,但王者荣耀官网可是有非常多的,那我该如何进行批量抓取呢?
你们还记得我们开头分析的那个文件嘛?就是逐渐+1的ename?这个数字是不是有什么关系呢?我们一起来看下这个目标图片的网址:
![](https://img-blog.csdnimg.cn/img_convert/63bc03451061b9f0b742dc9f58642d37.png)
这个是517,再来看看另外的。李信这个英雄是:
![](https://img-blog.csdnimg.cn/img_convert/d1243153076ee6ac179f846816f9a8c9.png)
数字变成了507!我们是不是可以大胆的猜测一下,这个数字就是我们找到的ename?那我们想要拿到每一张高清无码图片的话,是不是只要改变这个数字就行了?邓小平爷爷说过:实践是检验真理的唯一标准!我们进行实践不就知道了?
![](https://img-blog.csdnimg.cn/img_convert/5010031be0d13da8b332ac517b230fec.png)
改成105是廉颇!
![](https://img-blog.csdnimg.cn/img_convert/322c34d206892624f453565221a578f4.png)
改成106是小乔!!!这里就基本确定了,如果你还不敢确定的话,那你可以去进行多次尝试得到证实。言归正传,我们的目标是要下载所有的皮肤图片,那么是不是拿到这个链接地址,然后给他改变数字就行了?直接大胆尝试!
获取到这个文件的所有数据:
![](https://img-blog.csdnimg.cn/img_convert/c52f12759fbd886334ea659482327194.png)
获取之后他是在列表里面,那么我们就可以通过循环拿到列表里面的数据:
![](https://img-blog.csdnimg.cn/img_convert/c6846becf7d01abe7b347e90c2d98f2f.png)
除了拿到ename之外,我们还拿到了cname,cname是什么?仔细观察的小伙伴应该已经发现了,cname就是每个英雄的名字,我们图片保存下来是不是还得要名字?那么cname已经给我们写好了,我们就不用自己操心了,直接提取即可。
提取下来ename数字之后,直接进行拼接:
![](https://img-blog.csdnimg.cn/img_convert/78aa7ba04595e9a7ba5f8b4fcba07571.png)
这样就拿到了我们每一张图片的地址,直接对他们进行二次请求,为什么呢?就是因为图片是二进制数据,而前面的是json数据,那么现在获取的是图片,就要进行二次请求,进行.content。一切准备就绪,进行保存。
![](https://img-blog.csdnimg.cn/img_convert/78aa7ba04595e9a7ba5f8b4fcba07571.png)
看看效果:
![](https://img-blog.csdnimg.cn/img_convert/29201361e27a4e6dbb160aab9be12bc8.png)
可以看到的是,不仅保存下来了,并且每一个英雄的名字也没有出现差错!你学会没有?大家看完之后一定要去进行操作哦。