教你用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笔记(2)
Oct 24 Python
Python与Redis的连接教程
Apr 22 Python
python回调函数中使用多线程的方法
Dec 25 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
Jan 29 Python
python进行两个表格对比的方法
Jun 27 Python
解决PyCharm的Python.exe已经停止工作的问题
Nov 29 Python
Django给admin添加Action的步骤详解
May 01 Python
Python使用mongodb保存爬取豆瓣电影的数据过程解析
Aug 14 Python
python构建指数平滑预测模型示例
Nov 21 Python
python @propert装饰器使用方法原理解析
Dec 25 Python
Python爬虫之爬取淘女郎照片示例详解
Jul 28 Python
python uuid生成唯一id或str的最简单案例
Jan 13 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
Python实现生成bmp图像的方法
Jun 13 #Python
Python实现随机生成迷宫并自动寻路
You might like
php在线代理转向代码
2012/05/05 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
Yii学习总结之数据访问对象 (DAO)
2015/02/22 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
CSDN轮换广告图片轮换效果
2007/03/27 Javascript
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
Jquery实现带动画效果的经典二级导航菜单
2013/03/22 Javascript
探讨JavaScript中的Rest参数和参数默认值
2015/07/29 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
JavaScript提高性能知识点汇总
2016/01/15 Javascript
jquery中live()方法和bind()方法区别分析
2016/06/23 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
VUE JS 使用组件实现双向绑定的示例代码
2017/01/10 Javascript
BootStrapValidator初使用教程详解
2017/02/10 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
详解webpack+ES6+Sass搭建多页面应用
2018/11/05 Javascript
Javascript原生ajax请求代码实例
2020/02/20 Javascript
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
[02:30]联想杯DOTA2完美世界全国高校联赛—北京站现场
2015/11/16 DOTA
python调用shell的方法
2013/11/20 Python
wxpython中自定义事件的实现与使用方法分析
2016/07/21 Python
TensorFlow如何实现反向传播
2018/02/06 Python
pandas 快速处理 date_time 日期格式方法
2018/11/12 Python
python使用PIL实现多张图片垂直合并
2019/01/15 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
python实现逆滤波与维纳滤波示例
2020/02/26 Python
python opencv 检测移动物体并截图保存实例
2020/03/10 Python
python 用opencv实现图像修复和图像金字塔
2020/11/27 Python
html5嵌入内容_动力节点Java学院整理
2017/07/07 HTML / CSS
旅游管理专业学生求职信
2013/09/28 职场文书
放飞梦想演讲稿
2014/05/05 职场文书
租房协议书
2014/09/12 职场文书
建设工程授权委托书
2014/09/22 职场文书
预备党员群众路线思想汇报2014
2014/10/25 职场文书
七年级作文之冬景
2019/11/07 职场文书