requests爬取英雄联盟皮肤图片
LOL大家都爱玩吧,今天我们来爬一波图。用requests爬取英雄联盟官网所有英雄的皮肤图片,并以英雄分类保存。
一,网页分析
首先我们打开英雄联盟官网,并找到英雄页面,然后分析页面,先查看网页源码,这里我们就以第一个英雄 “ 黑暗之女 ” 为例,点击可以看到他的名字和头像的图片链接都在id = " jSearchHeroDiv " 的ul节点下面的li节点中,由此看出一个英雄就是一个li节点。
可以看到,网页源代码中没有资源,通过请求皮肤站页面发现并没有出来结果。由此推断出,该页面内容是通过js加载出来的,这是打开Network选项卡,筛选JS请求,然后发现有一个hero_list.js,点到Preview选项卡,可以看到这里面存放着英雄信息,然后点进headers选项卡得知他的url为https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js
接着,我们点击第一个英雄,可以发现,当网页加载完成时,在开发者工具的Network选项中出现了一个
1.js的文件,之后点击他的header,发现他的url为https://game.gtimg.cn/images/lol/act/img/js/hero/1.js。
我们点击它,再点击Preview选项,点击查看,发现里面是这个英雄以及皮肤的详细信息,这些信息就是我们所需要的了。
最后通过分析可以得知name就是皮肤的名称,mainImg就是我们想要的皮肤图片,只要得到这些关键信息就可以制作爬虫了
那我们就按照这个思路开始我们的爬虫吧!
一,获取英雄数量
首先我们进入英雄列表页,打开Network选项卡,筛选JS请求,然后发现有一个hero_list.js,这里存放在所有英雄,点到后查看headers选项卡得知他的url为https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js,这样就可以得到英雄数量了。
r = requests.get(hero_url) hero_json = r.json() hero_json = hero_json['hero'] print(len(hero_json))
二,获取英雄名(创建目录)
点击英雄详情页面,查找JS文件(方法同上),可以得到他的url,但是我们要做的是爬取所有英雄的皮肤图片,所有我们看一下能不能找到什么规律,我们再点击第二个英雄查看一下
https://game.gtimg.cn/images/lol/act/img/js/hero/
1.js
https://game.gtimg.cn/images/lol/act/img/js/hero/2.js
通过观察可以看到网页链接基本相同,只有 .js 前面的数字不一样,这里的数字就是英雄的编号,所以只要使这里的数字发生变化就能得到对应英雄的信息。从json里我们可以得到英雄名称,皮肤名称,图片地址等信息,这时我们就可以创建对应英雄的文件夹了。我们来看代码实现
def get_info(base_url): url = base_url + str(i) + '.js' r = requests.get(url) info = r.json() hero = info.get('hero').get('name') #英雄名称 skins = info.get('skins') path = file_path + '/' + hero if not os.path.exists(path): os.mkdir(path)
三,获取皮肤名称与地址
获取皮肤名称与地址的方法与上面相同,所以不做太多介绍,这里需要注意的是有的皮肤url为空,这就需要在遍历的时候注意,遇到空url就跳过,然后访问图片url,并以二进制写入。
def get_skin(path, skins): for skin in skins: skin_name = skin.get('name') skin_url = skin.get('mainImg') if skin_url == '': continue img = requests.get(skin_url, headers=headers) if not os.path.exists(path + '/' + skin_name + '.jpg'): with open(path + '/' + skin_name + '.jpg', 'wb')as f: f.write(img.content)
四,执行主程序
这里加入了计时,方便查看程序所用时长
if __name__ == '__main__': r = requests.get(hero_url) hero_json = r.json() hero_json = hero_json['hero'] # 获取英雄数量 print(len(hero_json)) for i in range(1, len(hero_json)): get_info(base_url) print('用时{:.3f}s'.format(start - perf_counter()))
好了,以上就是对英雄联盟全站所有皮肤图片的抓取过程
下面是爬取结果(这里只采集前20个英雄):
完整代码:
import json import requests import os from time import perf_counter # 开始计时 start = perf_counter() headers = { 'user - agent': 'Mozilla / 5.0(Windows NT 10.0;Win64;x64) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 84.0.4147.89Safari / 537.36' } hero_url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js' base_url = 'https://game.gtimg.cn/images/lol/act/img/js/hero/' file_path = 'E:\python\project\LOL英雄皮肤\image' # 获取英雄名并创建文件夹 def get_info(base_url): url = base_url + str(i) + '.js' r = requests.get(url) info = r.json() hero = info.get('hero').get('name') skins = info.get('skins') path = file_path + '/' + hero if not os.path.exists(path): os.mkdir(path) get_skin(path, skins) print(hero + ' —— ok') # 获取皮肤并保存 def get_skin(path, skins): for skin in skins: skin_name = skin.get('name') skin_url = skin.get('mainImg') if skin_url == '': continue img = requests.get(skin_url, headers=headers) if not os.path.exists(path + '/' + skin_name + '.jpg'): with open(path + '/' + skin_name + '.jpg', 'wb')as f: f.write(img.content)if __name__ == '__main__': r = requests.get(hero_url) hero_json = r.json() hero_json = hero_json['hero'] # 获取英雄数量 for i in range(1, len(hero_json)): get_info(base_url) print('用时{:.3f}s'.format(start - perf_counter()))
如有错误,欢迎私信纠正,谢谢支持!
- 简易爬虫--50行代码获取英雄联盟全英雄皮肤
- 英雄联盟 皮肤修改工具的逆向与实现
- LoLSkip2.0使用说明(英雄联盟换肤全皮肤版本)
- 用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
- 基于Cocos2d-x的英雄联盟皮肤选择菜单
- 王者荣耀英雄皮肤官方高清图片爬虫
- 英雄联盟自定义皮肤教程[使用篇]
- 爬取英雄联盟全皮肤
- 用python网络爬虫爬取英雄联盟英雄图片
- 爬虫===爬取王者荣耀所有英雄皮肤图片
- python实践——《英雄联盟》英雄及皮肤图片的爬虫
- python爬虫——爬取英雄联盟英雄基本信息
- Python爬虫之Requests库——网络图片的爬取和存储
- python爬虫入门------王者荣耀英雄及皮肤数据爬取项目
- 用Requests下载百度一页图片,以下载芳心纵火犯为例
- 易编远航第8套英雄联盟-LOL(MOBA)类游戏思路编写与实战
- "一起测试网"第一届"测试英雄联盟擂台赛"开始了,丰厚大奖等你来拿
- 基于QML Pathview的大型游戏英雄联盟-预览界面
- 利用Requests爬取图片与网页数据
- Android皮肤切换,加载其他apk的图片、布局