爬取英雄联盟数据,搭建英雄本地库(主要是得到数据的方法,后续可自己优化编写代码,录入数据库)
问题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代码,然后再分析,找到请求方法,分析出地址和参数。