首页 > Python基础教程 >
-
想要获得LOL英雄皮肤,Pyhon来帮你

本文首发于公众号python编程之美。
相信很多小伙伴都有玩过撸啊撸吧,不要误会,不是来教大家怎么玩游戏的。当然,我也不会,因为我压根没玩过。

不过,每次看到我室友玩,都感觉很多英雄的皮肤是真的帅,甚至想拿来当壁纸。今天,笔者就带大家用python爬取英雄联盟里英雄的所有皮肤。
一、页面分析
首先先到英雄联盟官网找到英雄的皮肤
http://lol.qq.com/web201310/info-heros.shtml
如下图,所有英雄都在这个页面上。

之后随便点击一个英雄,跳转页面后发现英雄简介,技能介绍,所有皮肤等都在这个页面上。但是呢,这个是html页面,没有图片的下载原地址。这时可以鼠标右击选择“在新标签页中打开图片”,这才是图片的原地址(如下图)。

我们通过打开同一英雄的不同皮肤,每一个英雄及皮肤的地址只有编号(也就是地址后面的6个数字)的后三个数字是不一样的,据此,可以得知,前3位表示英雄ID,后三位表示皮肤。所以我们只要得到所有编号就可以进行爬取了。
点开一个英雄,按下F12,找到 NetWork,然后按 F5刷新。找到如下图所示的几个红框。打开链接中的 JS文件,可看到里面包含了皮肤的编号,名字等信息。


分析每个英雄的 JS文件链接,发现改变的只是英雄的英文名。我们重新回到
http://lol.qq.com/web201310/info-heros.shtml
这个网址,像如上操作一样找到 JS文件,这次找的文件是 champion.js。可看到里面就有我们需要的英雄的英文名字。

所以我们可以先爬 champion.js文件中所有英雄的名字,就可以得到每个英雄详情页 JS文件,继而得到英雄皮肤的所有编号。然后进行下载地址拼接,就可以得到所有皮肤的链接地址,之后就可以用 requests 进行下载。
二、代码实现
首先通过获取 champion.js文件的源代码取得英雄名字。

之后通过刚才获取的名字爬取单个英雄详情页

然后通过 json解析获得英雄的 ID和名字,进行下载地址的拼接,最后用python的文件操作将图片以二进制形式写入文件。

三、结果


经过漫长的时间等待,终于执行完了。从图中可看出,这个程序执行了2075秒,也就是大概35分钟,下载了1100张图片。执行慢我感觉其一是网络原因,因为还没开校园网,所以本次爬取是连接手机热点的。其二是用的是单线程,所以有时间会进行改进,大家也可以自己试着用多线程爬取。
最后,公众号后台回复LOL,获得本文所有代码。