教你用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 BeautifulSoup中文乱码问题的2种解决方法
Apr 22 Python
在Python中使用成员运算符的示例
May 13 Python
Python3读取文件常用方法实例分析
May 22 Python
Python 中开发pattern的string模板(template) 实例详解
Apr 01 Python
python实现发送邮件功能
Jul 22 Python
python中子类调用父类函数的方法示例
Aug 18 Python
用python统计代码行的示例(包括空行和注释)
Jul 24 Python
对pytorch网络层结构的数组化详解
Dec 08 Python
Python中logging实例讲解
Jan 17 Python
python DataFrame 取差集实例
Jan 30 Python
python异步存储数据详解
Mar 19 Python
python怎么删除缓存文件
Jul 19 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
Python实现生成bmp图像的方法
Jun 13 #Python
Python实现随机生成迷宫并自动寻路
You might like
说明的比较细的php 正则学习实例
2008/07/30 PHP
使用PHP提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
关于微信公众号开发无法支付的问题解决
2018/12/28 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
sqlalchemy对象转dict的示例
2014/04/22 Python
python中的闭包用法实例详解
2015/05/05 Python
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
Python基于pycrypto实现的AES加密和解密算法示例
2018/04/10 Python
python爬虫框架scrapy实现模拟登录操作示例
2018/08/02 Python
python 获取微信好友列表的方法(微信web)
2019/02/21 Python
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
根据tensor的名字获取变量的值方式
2020/01/04 Python
python如何绘制疫情图
2020/09/16 Python
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
ToysRus日本官网:玩具反斗城
2018/09/08 全球购物
飞利浦法国官网:Philips法国
2019/07/10 全球购物
乌克兰数字设备、配件和智能技术的连锁商店:KTC
2020/08/18 全球购物
Strathberry苏贝瑞中国官网:西班牙高级工匠手工打造
2020/10/19 全球购物
经典c++面试题六
2012/01/18 面试题
合伙经营协议书
2014/04/18 职场文书
班级团队活动方案
2014/08/14 职场文书
2014公安机关纪律作风整顿思想汇报
2014/09/13 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
2014标准社保办理委托书
2014/10/06 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书