Java爬取英雄联盟官网,全英雄皮肤背景图片
- 1.首先获取全英雄名
- 2.创建全英雄皮肤收藏的文件夹
- 3.根据英雄id,和英雄名称,保存进对应的英雄名称文件夹中。
- 4.以下方法用来测试
- https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js!!!
- 5.完整版来咯
- 6.看成品
1.首先获取全英雄名
去30行Python代码爬取英雄联盟全英雄全皮肤页面,里面有 代码的实现思路,大家可以去看看。以下代码省略了几个步骤,实现了获取116位英雄的皮肤,升序36位英雄皮肤因程序执行太慢并未下载,感兴趣的朋友欢迎私信。
下面这个全英雄名称中,前116位英雄,经过测试以及进行了排序,后36位英雄因为英雄id编号排序跨度较大暂未进行排序,排序完成的结果就是在英雄名称前补全空位即可完成排序。
public static List<String> heroList() {String[] strings = {"黑暗之女 安妮", "狂战士 奥拉夫", "正义巨像 加里奥", "卡牌大师 崔斯特", "德邦总管 赵信", "无畏战车 厄加特", "诡术妖姬 乐芙兰", "猩红收割者 弗拉基米尔", "远古恐惧 费德提克", "正义天使 凯尔","无极剑圣 易", "牛头酋长 阿利斯塔", "符文法师 瑞兹", "亡灵战神 赛恩", "战争女神 希维尔", "众星之子 索拉卡", "迅捷斥候 提莫", "麦林炮手 崔丝塔娜", "祖安怒兽 沃里克", "雪原双子 努努和威朗普","赏金猎人 厄运小姐", "寒冰射手 艾希", "蛮族之王 泰达米尔", "武器大师 贾克斯", "堕落天使 莫甘娜", "时光守护者 基兰", "炼金术士 辛吉德", "痛苦之拥 伊芙琳", "瘟疫之源 图奇", "死亡颂唱者 卡尔萨斯","虚空恐惧 科加斯", "殇之木乃伊 阿木木", "披甲龙龟 拉莫斯", "冰晶凤凰 艾尼维亚", "恶魔小丑 萨科", "祖安狂人 蒙多医生", "琴瑟仙女 娑娜", "虚空行者 卡萨丁", "刀锋舞者 艾瑞莉娅", "风暴之怒 迦娜","海洋之灾 普朗克", "英勇投弹手 库奇", "天启者 卡尔玛", "瓦洛兰之盾 塔里克", "邪恶小法师 维迦"," "," ","巨魔之王 特朗德尔", "诺克萨斯统领 斯维因", "皮城女警 凯特琳", " ", " ", "蒸汽机器人 布里茨", "熔岩巨兽 墨菲特","不祥之刃 卡特琳娜", "永恒梦魇 魔腾", "扭曲树精 茂凯", "荒漠屠夫 雷克顿", "德玛西亚皇子 嘉文四世", "蜘蛛女皇 伊莉丝", "发条魔灵 奥莉安娜", "齐天大圣 孙悟空", "复仇焰魂 布兰德", "盲僧 李青"," "," ","暗夜猎手 薇恩", "机械公敌 兰博", "魔蛇之拥 卡西奥佩娅"," "," ","水晶先锋 斯卡纳", " ","大发明家 黑默丁格","沙漠死神 内瑟斯", "狂野女猎手 奈德丽", "兽灵行者 乌迪尔", "圣锤之毅 波比", "酒桶 古拉加斯","不屈之枪 潘森", "探险家 伊泽瑞尔", "铁铠冥魂 莫德凯撒", "牧魂人 约里克", "离群之刺 阿卡丽", "狂暴之心 凯南", "德玛西亚之力 盖伦", " ", " ","曙光女神 蕾欧娜", "虚空先知 玛尔扎哈", "刀锋之影 泰隆","放逐之刃 锐雯", " ", " ", " ","深渊巨口 克格莫", " ","暮光之眼 慎", "光辉女郎 拉克丝", " ","远古巫灵 泽拉斯", "龙血武姬 希瓦娜", "九尾妖狐 阿狸", "法外狂徒 格雷福斯", "潮汐海灵 菲兹", "不灭狂雷 沃利贝尔","傲之追猎者 雷恩加尔", " ", " ","惩戒之箭 韦鲁斯", "深海泰坦 诺提勒斯", "机械先驱 维克托", "北地之怒 瑟庄妮", "无双剑姬 菲奥娜", "爆破鬼才 吉格斯", " ","仙灵女巫 璐璐", " ","荣耀行刑官 德莱文", "战争之影 赫卡里姆","虚空掠夺者 卡兹克", "诺克萨斯之手 德莱厄斯", " ", " ", " ","未来守护者 杰斯", "冰霜女巫 丽桑卓", " ", " ", " ","皎月女神 黛安娜", " ","德玛西亚之翼 奎因","暗黑元首 辛德拉", " ","铸星龙王 奥瑞利安索尔", " ", " ", " ", " ","影流之镰 凯隐", "暮光星灵 佐伊","荆棘之兴 婕拉", " ","虚空之女 卡莎", " ","星籁歌姬 萨勒芬妮", " ", " ","迷失之牙 纳尔", " ", " ", " ","生化魔人 扎克", " ", " ","疾风剑豪 亚索", " ", " ", " ","虚空之眼 维克兹", " ","岩雀 塔莉垭", "青钢影 卡蜜尔", "弗雷尔卓德之心 布隆","戏命师 烬", "永猎双子 千珏", "暴走萝莉 金克丝", "河流之王 塔姆", "涤魂圣枪 赛娜", "圣枪游侠 卢锡安", "影流之主 劫", "暴怒骑士 克烈", "时间刺客 艾克", "元素女皇 奇亚娜","皮城执法官 蔚", "暗裔剑魔 亚托克斯", "唤潮鲛姬 娜美", "沙漠皇帝 阿兹尔", "魔法猫咪 悠米", "沙漠玫瑰 莎弥拉", "魂锁典狱长 锤石", "海兽祭司 俄洛伊", "虚空遁地兽 雷克塞", "翠神 艾翁","复仇之矛 卡莉丝塔", "星界游神 巴德", "幻翎 洛", "逆羽 霞", "山隐之焰 奥恩", "解脱者 塞拉斯", "万花通灵 妮蔻", "残月之肃 厄斐琉斯", "血港鬼影 派克", "封魔剑魂 永恩","腕豪 瑟提", "含羞蓓蕾 莉莉娅"};List<String> strlist = new ArrayList();for (int i = 0; i < strings.length; i++) {String a = strings[i];strlist.add(a);}
// System.out.println("英雄数:" + strlist.size() + " " + strlist);return strlist;}
2.创建全英雄皮肤收藏的文件夹
如果不喜欢此方式生成文件夹的朋友,也可以将此方法加入到下面用来保存皮肤背景图片的循环中。
public static void main(String[] args) throws Exception {List<String> stringList = heroList();for (int i = 0 ; i < stringList.size() ; i++){String fileName = stringList.get(i);File file = new File("C:\\Users\\Administrator\\Pictures\\lol英雄图片\\"+fileName);if (!file.exists()){file.mkdirs();}Thread.sleep(2000);}}
3.根据英雄id,和英雄名称,保存进对应的英雄名称文件夹中。
如果不喜欢此方式生成文件夹的朋友,也可以将此方法加入到下面用来保存皮肤背景图片的循环中。
public static void main(String[] args) throws Exception{for (int kk = 0; kk < 188; kk++) {SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String startTime = df.format(new Date());System.out.println("开始运行时间:"+startTime);int z = kk;List<String> as = heroList();int c = z - 1;for (int ii = 0; ii < as.size(); ii++) {String ste = as.get(c);List<String> stringList = new ArrayList<>();for (int jj = 0; jj < as.size(); jj++) {String sty = String.format("%03d", jj);stringList.add("https://game.gtimg.cn/images/lol/act/img/skin/big" + z + sty + ".jpg");}for (int i = 0; i < stringList.size(); i++) {try {String url = stringList.get(i);URL url1 = new URL(url);URLConnection uc = url1.openConnection();InputStream inputStream = uc.getInputStream();String picrureName = ste + i;FileOutputStream out = new FileOutputStream("C:\\Users\\Administrator\\Pictures\\lol英雄图片\\" + ste + "\\" + picrureName + ".jpg");int j = 0;while ((j = inputStream.read()) != -1) {out.write(j);}inputStream.close();} catch (Exception e) {continue;}}break;}SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String endTime = dfs.format(new Date());System.out.println("程序结束运行时间:"+endTime);long min = dateDiff(startTime,endTime,"yyyy-MM-dd HH:mm:ss");System.out.println("程序运行时间:"+min+" 分钟");System.out.println("保存图片次数:"+kk);System.out.println(" ");}}
4.以下方法用来测试
https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js!!!
这个地址包含全英雄的英雄ID,英雄名称,其它信息无关紧要。需要转JSON后进行使用。
public static void main(String[] args) throws Exception {}
//https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js
public static void main(String[] args) {//完整版里有完整字符串String a = “[{\"heroId\":\"1\",\"name\":\"\\u9ed1\\u6697\\u4e4b\\u5973\",\"al ”;List<String> strlist = new ArrayList();List heroList = new ArrayList<>();JSONObject jsonObject = JSONObject.parseObject(a);heroList = (List) jsonObject.get("hero");System.out.println(jsonObject);System.out.println(heroList);for (int i = 0 ; i < heroList.size() ; i++){Hero hero = (Hero) heroList.get(0);String heroId = hero.getHeroId();System.out.println(heroId);System.out.println(heroList.get(0));break;}}
//时间差
public static long dateDiff(String startTime, String endTime, String format) throws Exception {//按照传入的格式生成一个simpledateformate对象SimpleDateFormat sd = new SimpleDateFormat(format);long nd = 1000*24*60*60;//一天的毫秒数long nh = 1000*60*60;//一小时的毫秒数long nm = 1000*60;//一分钟的毫秒数long ns = 1000;//一秒钟的毫秒数long diff;//获得两个时间的毫秒时间差异diff = sd.parse(endTime).getTime() - sd.parse(startTime).getTime();long day = diff/nd;//计算差多少天long hour = diff%nd/nh;//计算差多少小时long min = diff%nd%nh/nm;//计算差多少分钟long sec = diff%nd%nh%nm/ns;//计算差多少秒//输出结果System.out.println("时间相差:"+day+"天"+hour+"小时"+min+"分钟"+sec+"秒。");return min ;}
5.完整版来咯
Java爬取英雄联盟官网,全英雄皮肤背景图片。
6.看成品