1.打开英雄联盟的官网,找到英雄介绍的页面
/data/info-heros.shtml所有英雄的页面
/data/info-defail.shtml?id=1 单个英雄的详细页面
2.使用postman调用单个英雄网址 分析页面 抓到英雄信息的具体网址js
如上图所示:文件地址:/images/lol/act/img/js/hero/1.js
注意:1.js数字不固定,有多少个英雄就有多少个js js顺序不连续如图所示:
3.打开eclipse,引入maven依赖,这个是开源的工具类。
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.1.5</version></dependency>
4.编写代码 为什么循环取875,是上边分析页面得出的最大值,中间有很多没有的js,访问不到的。
public static void downloadTest() throws Exception {String result1;for (int i = 1; i <= 875; i++) {result1= HttpUtil.get("/images/lol/act/img/js/hero/"+i+".js");//Console.log(result1);if(result1.length()>85) {JSONObject jsonObject = JSONUtil.parseObj(result1);JSONArray skinsArray = jsonObject.getJSONArray("skins");List<String> heroNameList = new ArrayList<>();List<String> heroUrlList = new ArrayList<>();String heroTitle,heroName,name,mainImg;for (Object obj : skinsArray) {//obj.toString();//Console.log(obj.toString());JSONObject skinObject = JSONUtil.parseObj(obj.toString());heroTitle = skinObject.get("heroTitle").toString();heroName = skinObject.get("heroName").toString();name = skinObject.get("name").toString();mainImg = skinObject.get("mainImg").toString();//Console.log("英雄名字:{}-{}-{},皮肤URL:{}",heroName,heroTitle,name,mainImg);heroNameList.add(heroName+"-"+heroTitle+"-"+name);heroUrlList.add(mainImg);}for (int j = 0; j < heroUrlList.size(); j++) {if(!"".equals(heroUrlList.get(j))&&heroUrlList.get(j)!=null) {HttpUtil.downloadFile(heroUrlList.get(j), FileUtil.file("d:/英雄联盟皮肤/"+heroNameList.get(j)+".jpg"));}}Console.log("下载完成 {}",i);}Thread.sleep(1000);}}
为了访问慢一点,这里让主线程睡眠1秒。当然也不是必须的。
结果:可以看到所有图片都下载到本地了,大概一千多张。