爬取英雄联盟数据,搭建英雄本地库(主要是得到数据的方法,后续可自己优化编写代码,录入数据库)

问题1.

获取英雄信息列表。

首先进去英雄联盟官网,

https://lol.qq.com/data/info-heros.shtml#Navi

爬取数据的时候,直接使用代码访问页面,分析html-doc,会发现英雄数据是动态加载的。

那就很可能是ajax请求的了,

现在很重要

F12 ---  Network  -------
清除掉刚刚的所有文件,重新刷新
筛选 点击XHR,这个是记录ajax请求的,很快就会发现一个hero_list.js文件,ok解决掉一个问题。

https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js

分析js

{
heroId: "1",              //英雄ID
name: "黑暗之女",          //中文名字,代码中Unicode编码
alias: "Annie",           //英文名
title: "安妮",             //昵称
roles: [
"mage"                    //职业分类,法师,还有tank等等,可以多个
],
isWeekFree: "0",          //是否周免?
attack: "2",              //攻击(物理)
defense: "3",             //防御
magic: "10",              //魔法
difficulty: "6",          //上手难度
selectAudio: "https://game.gtimg.cn/images/lol/act/img/vo/choose/1.ogg",//选英雄的语音
banAudio: "https://game.gtimg.cn/images/lol/act/img/vo/ban/1.ogg"       //被ban的时候的语音
},

有了这些数据,就可以搭建一个简易的英雄数据库了。

但是还是少了一些什么,比如英雄头像小图标,英雄皮肤,背景故事等等。

不要着急,下面我们一一解决。

问题2

英雄头像

F12去查看英雄小图标

<img src="//game.gtimg.cn/images/lol/act/img/champion/Annie.png" alt="黑暗之女 安妮">

可以发现 src中的Annie就是英雄的英文名,上面的js中,可以获取所有的英文名
我们挑选其中一个,如赵信,将Annie替换成XinZhao
game.gtimg.cn/images/lol/act/img/champion/XinZhao.png
将URL复制到浏览器中,可以成功获取到头像了。

问题3

获取英雄皮肤

先进入英雄详情页,比如我们的港哥 派克

https://lol.qq.com/data/info-defail.shtml?id=555
英雄id 555,去对照hero list中的id,一致。
随便换一个 @问题1 中有的id,复制到浏览器访问,
比如 巴德 432
https://lol.qq.com/data/info-defail.shtml?id=432
成功进入巴德的详情页

然后我们按照 @问题2的方法去找皮肤,惊奇的发现

432.js,这不就是巴德的ID吗
https://game.gtimg.cn/images/lol/act/img/js/hero/432.js

里面有你所有想要的信息,包括问题4的背景故事,皮肤URL
还包括技能qwer的详细信息和对线技巧

因为太多,这里就不详细介绍每个字段的意思的,对照原网页,应该可以看的明白。

发现没有,其实所有的问题都在XHR中,

一直以为 是要获取js代码,然后再分析,找到请求方法,分析出地址和参数。