30行Python代码爬取英雄联盟全英雄全皮肤

碎碎念

英雄联盟游戏里拥有数百个个性英雄,然后每个英雄都有多个皮肤。作为一个收集控就非常想收齐全部皮肤----的图片。家境贫寒一言难尽看官点个赞呗!

前期分析

英雄皮肤的图鉴信息可以到官网游戏资料(https://lol.qq.com/data/info-heros.shtml)查看到。

爬取皮肤本身难度不大,就是将数据以二进制形式保存到文件中。难点是怎么拿到皮肤图片的URL地址。马上到官网,点开几个英雄皮肤分析一下。

随意选择一位英雄,然后F12打开调试台,找到英雄皮肤的图片地址:

找到皮肤图片位置,然后我们多找几个皮肤图片地址来对比分析,找到其中的规律:

英雄一

https://game.gtimg.cn/images/lol/act/img/skin/big1000.jpg

https://game.gtimg.cn/images/lol/act/img/skin/big1001.jpg

https://game.gtimg.cn/images/lol/act/img/skin/big1002.jpg

英雄二

https://game.gtimg.cn/images/lol/act/img/skin/big2000.jpg

https://game.gtimg.cn/images/lol/act/img/skin/big2001.jpg

https://game.gtimg.cn/images/lol/act/img/skin/big2002.jpg

这里对比分析两个英雄的3个皮肤图片地址,发现只有最后的序号发生变换,猜测皮肤图片的地址通用格式为https://game.gtimg.cn/images/lol/act/img/skin/bigxxxx.jpg。序号部分规律应该是最前一位数字代表着英雄的编号,后三位的数字代表该英雄的皮肤编号。

x xxx

英雄编号 皮肤编号

按照这个规律,我们就能将全部的英雄皮肤图片地址推算出来。但。。。。实际上,英雄编号并不是依次递增的。比如说新英雄瑟提的编号为875,而实际上瑟提为正式服的第148位英雄。

这样一来,视乎英雄编号就没有什么规律了。别急,在英雄资料页,打开F12调试台,抓取网络请求,发现了几个文件。居然有一个hero_list.js文件。这个json文件里面存放的正是我们苦苦寻找的英雄编号:

英雄编号有了,那么下一步就是寻找英雄的皮肤编号了。因为每个英雄的皮肤数量不同,同一个皮肤还可能有炫彩皮肤,通过html文件正则匹配出来不是不行,只是懒~那尝试一下找找英雄详情页有没有类似与hero_list.js的文件。

这不是刚刚好了么XD~每个英雄有一个以英雄编号为前缀的json文件,里面记录着有该英雄的皮肤图片地址。其中的mainImg为皮肤大图、iconImg为皮肤头像。json文件中还记录着英雄的其他信息如:定位、技能、描述等等。可以自己尝试爬取下来,作用。。。。自行开发。

既然每个英雄的json文件中存有皮肤图片的地址,那就不需要我们自己构建英雄皮肤图片的地址,而是构建英雄json请求链接,从json中解析出来皮肤图片地址。

代码实现

需要用到os、requests库。第一步获取英雄编号的json文件。文件地址为:https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js,请求方式为get。这个地址可以在调试台中找到。获取json文件后,然后解析json数据,将英雄编号提取出来。

import os

import requests

#获取全部英雄json文件

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

herolist = requests.get(list_url)

#处理json文件

herolist_json = herolist.json()#转化为json格式

version = herolist_json['version']#提取版本信息

fileTime = herolist_json['fileTime']#提取json生成时间

heroId = list(map(lambda x:x['heroId'],herolist_json['hero']))#提取英雄Id

拿到英雄编号后,就需要构建出英雄独立json的地址,通用格式为:https://game.gtimg.cn/images/lol/act/img/js/hero/【英雄编号】.js。get请求地址获取英雄独立json文件,从文件中解析出皮肤地址:

for heroid in heroId:

herojs_url = "https://game.gtimg.cn/images/lol/act/img/js/hero/{}.js".format(heroid)

herojs = requests.get(herojs_url).json()#获取并转换为json文件

heroname = herojs['hero']['name'] + herojs['hero']['title']#提取英雄称号与别称

try:

os.mkdir(heroname)#创建英雄文件夹

print("\n\n[+] 文件夹【{}】创建成功,开始下载皮肤".format(heroname))

except FileExistsError:

print("\n\n[!] 文件夹【{}】已存在,开始下载皮肤".format(heroname))

for skin in herojs['skins']:

skinname = skin['name']#提取皮肤名称

print("[-] 正在下载【{}】".format(skinname))

skinurl = skin['mainImg']#提取皮肤链接

#炫彩皮肤错误处理

try:

skin_jpg = requests.get(skinurl)

if skin_jpg.status_code == 200:

f = open(heroname+"\\"+skinname+".jpg","wb")

f.write(skin_jpg.content)

f.close()

except:

print("[!] 【{}】为炫彩皮肤无图片".format(skinname))

当中有两个错误处理,一个是创建每个英雄独立文件夹;另外一个是处理炫彩皮肤。因为炫彩皮肤没有独立做的大图,所以json中并没有皮肤大图链接。

结尾

去除注释空行,近30行的代码即可将英雄联盟全英雄全皮肤图片爬取下来。先来看看成品吧~

完整代码

写代码的时候,文件夹创建用的是相对路径,创建在程序运行的目录下,所以请在源码所在目录下启动cmd(powershell)运行,否则文件夹创建位置不可预期。

#encoding:utf-8

import os

import requests

#获取全部英雄json文件

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

herolist = requests.get(list_url)

#处理json文件

herolist_json = herolist.json()#转化为json格式

version = herolist_json['version']#提取版本信息

fileTime = herolist_json['fileTime']#提取json生成时间

heroId = list(map(lambda x:x['heroId'],herolist_json['hero']))#提取英雄Id

#提示信息

print("当前版本为:{}".format(version))

print("英雄列表更新时间为:{}\n".format(fileTime))

print("准备开始下载皮肤....")

#下载每个英雄的皮肤

for heroid in heroId:

herojs_url = "https://game.gtimg.cn/images/lol/act/img/js/hero/{}.js".format(heroid)

herojs = requests.get(herojs_url).json()#获取并转换为json文件

heroname = herojs['hero']['name'] + herojs['hero']['title']#提取英雄称号与别称

try:

os.mkdir(heroname)#创建英雄文件夹

print("\n\n[+] 文件夹【{}】创建成功,开始下载皮肤".format(heroname))

except FileExistsError:

print("\n\n[!] 文件夹【{}】已存在,开始下载皮肤".format(heroname))

for skin in herojs['skins']:

skinname = skin['name']#提取皮肤名称

print("[-] 正在下载【{}】".format(skinname))

skinurl = skin['mainImg']#提取皮肤链接

#炫彩皮肤错误处理

try:

skin_jpg = requests.get(skinurl)

if skin_jpg.status_code == 200:

f = open(heroname+"\\"+skinname+".jpg","wb")

f.write(skin_jpg.content)

f.close()

except:

print("[!] 【{}】为炫彩皮肤无图片".format(skinname))

python游戏辅助lol_GitHub - skyedai910/lol-skin-spider: 30行Python代码爬取英雄联盟全英雄全皮肤...相关推荐

  1. python游戏辅助lol_Python爬虫实战,60行代码爬取英雄联盟全英雄全皮肤,找寻曾今那些被删除的绝版皮肤...

    学了一周多的爬虫课后终于按捺不住了,小编决定自己手动编写爬虫程序,刚好LJ在鼓励学员分享成果,优秀作品有奖励,就把自己用Python编程爬取各大游戏高清壁纸的过程整理了出来进行投稿,与大家一起分享. ...

  2. Python爬取王者荣耀全英雄全皮肤图片

    Python爬取王者荣耀全英雄全皮肤图片 前言 思路 分析 编码 案例源码 附图 总结 前言 以前写过类似的博客,利用Java爬取王者荣耀全英雄全皮肤图片,当时是利用 jsoup包来对目标网页进行解析 ...

  3. Python爬虫之简单爬虫之爬取英雄联盟官网的英雄的皮肤

    Python爬虫之简单爬虫之爬取英雄联盟官网的英雄的皮肤 文章目录 Python爬虫之简单爬虫之爬取英雄联盟官网的英雄的皮肤 背景:LOL这款游戏有着大量的玩家,这个游戏里面人们津津乐道的皮肤,每一款 ...

  4. 实用Python是如何爬取英雄联盟(lol)全部皮肤,涨知识了

    实用Python是如何爬取英雄联盟(lol)全部皮肤,涨知识了 小三:"怎么了小二?一副无精打采的样子!" 小二:"唉!别提了,还不是最近又接触了一个叫英雄联盟的游戏,游 ...

  5. 20行Python代码爬取王者荣耀全英雄皮肤改进版

    0 写在前面 看了大神的这篇CSDN:20行Python代码爬取王者荣耀全英雄皮肤访问量那么高,忍不住想要蹭一下热点,但是蹭归蹭,总得有点货才行,于是我品我细品,发现其代码总体有三点我觉得值得改进的地 ...

  6. python英雄联盟脚本是什么_Python3爬取英雄联盟英雄皮肤大图实例代码

    爬虫思路 初步尝试 我先查看了network,并没有发现有可用的API:然后又用bs4去分析英雄列表页,但是请求到html里面,并没有英雄列表,在英雄列表的节点上,只有"正在加载中" ...

  7. python爬取英雄联盟手游的全英雄皮肤 初识selenium

    python爬取英雄联盟手游的全英雄皮肤 前言 分析页面 具体代码 下载工具类 获取英雄列表的每个英雄 获取英雄皮肤链接并下载 完整代码 成果 总结 前言 近期这个鸽了好久的英雄联盟手游终于上线了,虽 ...

  8. Python爬取英雄联盟全皮肤

    Python爬取英雄联盟皮肤 打开英雄联盟官网:https://lol.qq.com,点击游戏资料,按F12进入开发者模式.刷新,找到hero_list.js,里面有我们需要的网址以及其他信息. 代码 ...

  9. 牛散村:python怎么爬取英雄联盟皮肤图片?爬虫实战!

    相信很多小伙伴都是喜爱英雄联盟的玩家,英雄联盟的皮肤制作还是比较精美的,有收集癖好的小编打算用爬虫将官网的皮肤爬取下来.接下来就看小编怎么用python爬取英雄联盟皮肤吧!(内附python爬虫源代码 ...

  10. python lol脚本_python 爬取英雄联盟皮肤并下载的示例

    爬取结果: 爬取代码 import os import json import requests from tqdm import tqdm def lol_spider(): # 存放英雄信息 he ...

最新文章

  1. 从Storm和Spark 学习流式实时分布式计算的设计
  2. 机器学习之SVM原理与案例
  3. Elasticsearch聚合初探——metric篇
  4. ubuntu 更换系统软件源 和 pip源
  5. 云炬随笔20171202
  6. 面试官让我讲下线程的TIMED_WAITING状态,我又笑了
  7. Deprecated: Function ereg_replace() is deprecated
  8. a1740最新php唯美博客系统源码,axublog 个人博客系统 php版 v1.1.1
  9. 用隐喻来更充分地理解软件开发
  10. 语音处理的分帧,帧移,加窗,滤波,降噪,合成
  11. JDBC:数据库操作:处理大对象CLOB数据
  12. 分享:中兴 远航 30 pro root 解锁BL magisk ZTE 7532N 8040N 9041N 刷机 刷面具原厂刷机包 root方法下载
  13. 添加logviewer用户
  14. 【原创】2021-2000上市公司重污染企业数据、上市公司重污染行业数据(常用变量均包括,可直接用)
  15. ele input事件 输入后0.5秒触发
  16. 流量不清零跑得快风波,运营商到底在掩盖什么
  17. 精选免费论文翻译工具
  18. win10清理_别人都说win10不需要装电脑管家,那电脑产生的垃圾该怎么清理呢
  19. 网页制作之JavaScript篇
  20. 为什么抑郁症的人情绪忽好忽坏,阴晴不定,脾气有的时候还很大?

热门文章

  1. solidworks绘制齿轮、机械爪(齿轮设计基础知识)
  2. 谷歌中国新管理团队集体亮相
  3. 腾讯开源|TAT Agent-助力轻松完成云服务器运维管理任务
  4. 利用Python3中turtle的绘制超立方体。
  5. linux更新war包操作步骤,关于Linux系统下基于Tomcat部署和升级war包的详细过程
  6. php中的资源是什么意思,PHP 和 COM
  7. Mac下tomcat启动报错Cannot run program。。。 Permission denied解决办法
  8. oss批量上传工具_阿里云oss一键上传工具-阿里云OSS上传工具PC版下载V1.0最新版-西西软件下载...
  9. matlab newton插值法,matlab中newton插值法
  10. 口袋之旅html5超强账号,《口袋之旅H5》攻略:各大排行榜冲榜攻略