教你用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中用keys()方法返回字典键的教程
May 21 Python
Python程序中的观察者模式结构编写示例
May 27 Python
python中 chr unichr ord函数的实例详解
Aug 06 Python
Python 比较两个数组的元素的异同方法
Aug 17 Python
Python自定义函数定义,参数,调用代码解析
Dec 27 Python
详解python3中tkinter知识点
Jun 21 Python
一个可以套路别人的python小程序实例代码
Apr 09 Python
python递归下载文件夹下所有文件
Aug 31 Python
Python判断变量是否是None写法代码实例
Oct 09 Python
Python之字符串的遍历的4种方式
Dec 08 Python
python实现发送邮件
Mar 02 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代码简化
2010/02/08 PHP
PHP 读取Postgresql中的数组
2013/04/14 PHP
php数组去重复数据示例
2014/02/25 PHP
PHP网站建设的流程与步骤分享
2015/09/25 PHP
如何使用微信公众平台开发模式实现多客服
2016/01/06 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
Avengerls vs Newbee BO3 第一场2.18
2021/03/10 DOTA
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
自己写的Javascript计算时间差函数
2013/10/28 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
javascript简易画板开发
2020/04/12 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
2017/01/11 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
纯JS实现只能输入数字的简单代码
2017/06/21 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
Python中的面向对象编程详解(下)
2015/04/13 Python
python中字符串前面加r的作用
2015/06/04 Python
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
Python3 模块、包调用&路径详解
2017/10/25 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
python新手学习可变和不可变对象
2020/06/11 Python
Python定义一个Actor任务
2020/07/29 Python
四年大学生活的个人自我评价
2013/12/11 职场文书
股东授权委托书范文
2014/09/13 职场文书
2015年党总支工作总结
2015/05/25 职场文书
高三语文教学反思
2016/02/16 职场文书
如何书写授权委托书?
2019/06/25 职场文书
MySQL分库分表与分区的入门指南
2021/04/22 MySQL
详解解Django 多对多表关系的三种创建方式
2021/08/23 Python
redis中lua脚本使用教程
2021/11/01 Redis
python双向链表实例详解
2022/05/25 Python
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技