教你用Python爬取英雄联盟皮肤原画


Posted in Python onJune 13, 2021

一、推理原理

1.先去《英雄联盟》官网找到英雄及皮肤图片的网址:

http://lol.qq.com/data/info-heros.shtml

教你用Python爬取英雄联盟皮肤原画

2.从上面网址可以看到所有英雄都在,按下F12查看源代码,发现英雄及皮肤图片并没有直接给出,而是隐藏在JS文件中。这时候需要点开Network,找到js窗口,刷新网页,就看到一个champion.js的选项,点击可以看到一个字典——里面就包含了所有英雄的名字(英文)以及对应的编号。

教你用Python爬取英雄联盟皮肤原画

3.但是只有英雄的名字(英文)以及对应的编号并不能找到图片地址,于是回到网页,随便点开一个英雄,跳转页面后发现英雄及皮肤的图片都在,但要下载还需要找到原地址,这是鼠标右击选择“在新标签页中打开”,新的网页才是图片的原地址。

教你用Python爬取英雄联盟皮肤原画

4.图中红色框就是我们需要的图片地址,经过分析知道:每一个英雄及皮肤的地址只有编号不一样(http://ossweb-img.qq.com/images/lol/web201310/skin/big266000.jpg),而该编号有6位,前3位表示英雄,后三位表示皮肤。刚才找到的js文件中恰好有英雄的编号,而皮肤的编码可以自己定义,反正每个英雄皮肤不超过20个,然后组合起来就可以了。

教你用Python爬取英雄联盟皮肤原画

二、推理代码

第一步:获取js字典

def path_js(url_js):
    res_js = requests.get(url_js, verify = False).content
    html_js = res_js.decode("gbk")
    pat_js = r'"keys":(.*?),"data"'
    enc = re.compile(pat_js)
    list_js = enc.findall(html_js)
    dict_js = eval(list_js[0])
    return dict_js

第二步:从 js字典中提取到key值生成url列表

def path_url(dict_js):
    pic_list = []
    for key in dict_js:
        for i in range(20):
            xuhao = str(i)
            if len(xuhao) == 1:
                num_houxu = "00" + xuhao
            elif len(xuhao) == 2:
                num_houxu = "0" + xuhao
            numStr = key+num_houxu
            url = r'http://ossweb-img.qq.com/images/lol/web201310/skin/big'+numStr+'.jpg'
            pic_list.append(url)
    print(pic_list)
    return pic_list

第三步:从 js字典中提取到value值生成name列表

def name_pic(dict_js, path):
    list_filePath = []
    for name in dict_js.values():
        for i in range(20):
            file_path = path + name + str(i) + '.jpg'
            list_filePath.append(file_path)
    return list_filePath

教你用Python爬取英雄联盟皮肤原画

第四步:下载并保存数据

def writing(url_list, list_filePath):
    try:
        for i in range(len(url_list)):
            res = requests.get(url_list[i], verify = False).content
            with open(list_filePath[i], "wb") as f:
                f.write(res)
 
    except Exception as e:
        print("下载图片出错,%s" %(e))
        return False

第五步:执行主程序

if __name__ == '__main__':
    url_js = r'http://lol.qq.com/biz/hero/champion.js'
    path = r'./data/'   #图片存在的文件夹
    dict_js = path_js(url_js)
    url_list = path_url(dict_js)
    list_filePath = name_pic(dict_js, path)
    writing(url_list, list_filePath)

运行后会在控制台打印出每一张图片的网址:

教你用Python爬取英雄联盟皮肤原画

在文件夹中可以看到图片已经下载好
如图:

教你用Python爬取英雄联盟皮肤原画

到此这篇关于教你用Python爬取英雄联盟皮肤原画的文章就介绍到这了,更多相关Python爬取皮肤内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python自定义类的数组排序实现代码
Aug 28 Python
浅谈对yield的初步理解
May 29 Python
Python基于Floyd算法求解最短路径距离问题实例详解
May 16 Python
python对日志进行处理的实例代码
Oct 06 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
CentOS7下安装python3.6.8的教程详解
Jan 03 Python
django列表筛选功能的实现代码
Mar 27 Python
python初步实现word2vec操作
Jun 09 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
Jul 02 Python
Django Auth用户认证组件实现代码
Oct 13 Python
python RSA加密的示例
Dec 09 Python
详解Python如何批量采集京东商品数据流程
Jan 22 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
Python实现生成bmp图像的方法
Jun 13 #Python
Python实现随机生成迷宫并自动寻路
You might like
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
2016/02/04 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
ThinkPHP实现分页功能
2017/04/28 PHP
php语言注释,单行注释和多行注释
2018/01/21 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
php二维数组按某个键值排序的实例讲解
2019/02/15 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
JavaScript中的类与实例实现方法
2015/01/23 Javascript
jQuery经过一段时间自动隐藏指定元素的方法
2015/03/17 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
js生成随机数的过程解析
2015/11/24 Javascript
jQuery实现表格隔行及滑动,点击时变色的方法【测试可用】
2016/08/20 Javascript
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
微信小程序实现页面下拉刷新和上拉加载功能详解
2018/12/03 Javascript
如何根据业务封装自己的功能组件
2019/04/19 Javascript
解决layui数据表格排序图标被超出的表头挤出去的问题
2019/09/19 Javascript
我所理解的JavaScript中的this指向
2020/09/04 Javascript
Python实现的金山快盘的签到程序
2013/01/17 Python
Python OS模块常用函数说明
2015/05/23 Python
python 把数据 json格式输出的实例代码
2016/10/31 Python
Python 和 JS 有哪些相同之处
2017/11/23 Python
python+matplotlib绘制饼图散点图实例代码
2018/01/20 Python
python实现图片上添加图片
2019/11/26 Python
python实现密码验证合格程序的思路详解
2020/06/01 Python
CSS3实现自定义Checkbox特效实例代码
2017/04/24 HTML / CSS
Melijoe时尚童装德国官网:Melijoe德国
2016/09/03 全球购物
工程概预算专业毕业生求职信
2013/10/04 职场文书
本科毕业生的求职信范文
2013/11/20 职场文书
遗产继承公证书
2014/04/09 职场文书
竞选大队委员演讲稿
2014/04/28 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
校园广播稿范文
2015/08/19 职场文书
2016年寒假政治学习心得体会
2015/10/09 职场文书
HTML5 语义化标签(移动端必备)
2021/08/23 HTML / CSS