教你用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中处理字符串之isdigit()方法的使用
May 18 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
Aug 30 Python
python学习笔记之列表(list)与元组(tuple)详解
Nov 23 Python
pyspark操作MongoDB的方法步骤
Jan 04 Python
如何利用Pyecharts可视化微信好友
Jul 04 Python
10个Python面试常问的问题(小结)
Nov 20 Python
python numpy 矩阵堆叠实例
Jan 17 Python
scrapy中如何设置应用cookies的方法(3种)
Sep 22 Python
python基于openpyxl生成excel文件
Dec 23 Python
基于pycharm 项目和项目文件命名规则的介绍
Jan 15 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
Jan 21 Python
用基于python的appium爬取b站直播消费记录
Apr 17 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
Python实现生成bmp图像的方法
Jun 13 #Python
Python实现随机生成迷宫并自动寻路
You might like
php5 mysql分页实例代码
2008/04/10 PHP
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
简单的php缓存类分享     php缓存机制
2014/01/22 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
PHP curl 抓取AJAX异步内容示例
2014/09/09 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
php5.6.x到php7.0.x特性小结
2019/08/17 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
详解phpstorm2020最新破解方法
2020/09/17 PHP
setTimeout 不断吐食CPU的问题分析
2009/04/01 Javascript
理解 JavaScript 预解析
2009/10/25 Javascript
javascript下数值型比较难点说明
2010/06/07 Javascript
Dom 结点创建 基础知识
2011/10/01 Javascript
百度地图api应用标注地理位置信息(js版)
2013/02/01 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
JQuery实现鼠标滚轮滑动到页面节点
2015/07/28 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
2016/09/15 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
2017/01/19 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
Vue页面刷新记住页面状态的实现
2019/12/27 Javascript
跟老齐学Python之折腾一下目录
2014/10/24 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
python实现把二维列表变为一维列表的方法分析
2019/10/08 Python
python集合的创建、添加及删除操作示例
2019/10/08 Python
Python numpy线性代数用法实例解析
2019/11/15 Python
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
飞利浦法国官网:Philips法国
2019/07/10 全球购物
初婚未育未抱养证明
2014/01/12 职场文书
2014年网络管理员工作总结
2014/12/01 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
离婚上诉状范文
2015/05/23 职场文书
Golang ort 中的sortInts 方法
2022/04/24 Golang