專 欄
❈
作者 :麦艳涛,挖掘机小王子,数据分析爱好者。
原文链接:https://zhuanlan.zhihu.com/p/28617629
❈
本文简介:本文使用Python制作爬虫,来爬取《英雄联盟》《王者荣耀》《神之浩劫》等游戏官方网站的英雄皮肤图片。可以作为新手爬虫的练手实战案例!!
对于腾讯的这三款MOBA游戏,其中《王者荣耀》和《英雄联盟》大部分同学可能都不会陌生。对于MOBA游戏,总会让人感叹:不怕神一样的对手,就怕猪一样的队友......当然自己也有一顿操作0:5的经历......
在浏览这些游戏官方网站的时候发现英雄的皮肤很好看,例如这一张:
想拿来做电脑壁纸。于是就打开开发者工具找到了这张壁纸的地址下载下来。但是我还想要赵云的其他皮肤壁纸。。。。。。还想要其他英雄的所有皮肤壁纸。。。。。。还想要《英雄联盟》《神之浩劫》的皮肤壁纸。。。。。。这样就用到爬虫了!!
这里主要讲解《王者荣耀》的爬取方法,其他类似。
- 《王者荣耀》
- 所有英雄
首先进入 所有英雄列表 ,你会看到下图:
在这个网页中包含了所有的英雄,头像及英雄名称。
- 单个英雄
点击其中一个英雄的头像,例如第一个“百里守约”,进去后如下图:
“百里守约”里面有两个皮肤图片(如右下角所示)。我们就是要抓取这样的图片(注意:不是右下角那两张小图,而是如上图所示中的大图)。在这个网页中查看“百里守约”的网址,可以看到网址是: https://pvp.qq.com/web201605/herodetail/196.shtml 。 其实网址中196.shtml以前的字符都是不变的,变化的只是196.shtml。那么196是什么呢?乍一看毫无意义,其实它是“百里守约”这个英雄 所对应的数字(我也不知道为啥这样对应!!)。也就是说,要想爬取图片你就应该进入每个英雄皮肤图片所在的网址。就像上图所示的“百里守约”。而要爬取所 有英雄的图片,就应该有所有单个英雄的网址。所有英雄的网址的关键就是每个英雄对应的数字。那么这些数字怎么找呢?
- 英雄数字
在所有英雄列表中,打开浏览器的开发者工具(F12),刷新,找到一个json格式的文件,如图所示:
这时就会看到所有英雄对应的数字了。在上图所示的Headers中可以找到该json文件对应的网址形式。将其导入Python,把这些数字提取出来,然后模拟出所有英雄的网址即可(网址的格式在上一小节中已经提过了)。
前面几个小节的代码如下(我的是Ubuntu(Linux)系统):
- 下载图片
现在可以进入所有英雄的网址了,可以爬取网址下的图片了。进入一个英雄的网址,打开开发者工具,在NetWork下刷新并找到英雄的皮肤图片(记住是大图)。如图所示:
然后在Headers中查看该图片的网址。会发现皮肤图片是有规律的。我们可以用这样的方式来模拟图片网址:' http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'+str(v)+'/'+str(v)+'-bigskin-'+str(u)+'.jpg ', 在该网址中只有str(v)与str(u)是改变的(str( )是Python中的一个函数),str(v)是英雄对应的数字,str(u)只是图片编号,例如第一个图片就是1,第二个就是2,第三个。。。。。。而 一个英雄的皮肤应该不会超过12个(如果你不放心可以将这个值调到20等)。既然英雄皮肤的网址也有了,下面就是下载了!!
下载的代码如下(有些地址要换成你自己的):
执行完上面的代码后只需要执行main函数就行了
main()
爬取下来的图片是这样,每个文件夹里面是该英雄对应的图片,如下图:
- 《英雄联盟》(美服)(两种方法)
这两种方法的区别就在于:第一种不用观察图片规律,直接提取图片网址;第二种和抓取《王者荣耀》类似,都是模拟图片地址。
- 第一种
这一种是在提取图片网址的时候直接使用正则表达式来匹配出图片网址。 代码如下:
得到英雄的名字:
定义下载一个英雄图片的函数:
下载保存图片(保存地址要改):
执行:
- 第二种
得到英雄名字:
下载图片(保存地址要改):
执行:
main()
- 《神之浩劫》(美服)
对于《神之浩劫》的代码有些英雄在json文件中的名字还不是该英雄网址的名字,记得应该是孙悟空等,只需将hero_name中这些英雄的名称改对即可(我没有改,所以没有下全)。
- 最后--美图欣赏
蔡文姬:
狄仁杰:
贾克斯:
阿兹尔:
阿格尼:
嫦娥:
敖广:
钵迦罗刹:
声明:本爬虫仅供个人娱乐学习,请不要用于任何商业目的或违法行为!
长按扫描关注Python中文社区,
获取更多技术干货!
Python 中 文 社 区
Python中文开发者的精神家园
合作、投稿请联系微信:
pythonpost
— 人生苦短,我用Python —
1MEwnaxmMz7BPTYzBdj751DPyHWikNoeFS
本文为作者原创作品,未经作者授权同意禁止转载
本社区计划在北京、上海、深圳、广州、香港、杭州、成都、南京、武汉、西安十座城市设立城市俱乐部,以方便同城的Python开发者进行更加深入的交流,同时也为方便以后举办线上线下的活动,欢迎大家加入! 请直接添加工作人员微信:pythonpost并注明所在城市申请即可。