教你用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使用cookie库操保存cookie详解
Mar 03 Python
python在windows下创建隐藏窗口子进程的方法
Jun 04 Python
Python正则替换字符串函数re.sub用法示例
Jan 19 Python
Python使用正则表达式实现文本替换的方法
Apr 18 Python
Python 从相对路径下import的方法
Dec 04 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
Dec 05 Python
python实现贪吃蛇小游戏
Mar 21 Python
python时间序列按频率生成日期的方法
May 14 Python
Python如何使用BeautifulSoup爬取网页信息
Nov 26 Python
Numpy实现卷积神经网络(CNN)的示例
Oct 09 Python
如何用python插入独创性声明
Mar 31 Python
如何使用Python对NetCDF数据做空间相关分析
Apr 21 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
python基础入门之普通操作与函数(三)
python基础入门之字典和集合
Python OpenCV实现传统图片格式与base64转换
Jun 13 #Python
python实现A*寻路算法
Python实现生成bmp图像的方法
Jun 13 #Python
Python实现随机生成迷宫并自动寻路
You might like
PHP与javascript对多项选择的处理
2006/10/09 PHP
PHP 类型转换函数intval
2009/06/20 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
多个js与css文件的合并方法详细说明
2012/12/26 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
jQuery实现字符串按指定长度加入特定内容的方法
2015/03/11 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
省市二级联动小案例讲解
2016/07/24 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
2016/10/27 Javascript
jQuery实现花式轮播之圣诞节礼物传送效果
2016/12/25 Javascript
js实现定时进度条完成后切换图片
2017/01/04 Javascript
jQuery层级选择器实例代码
2017/02/06 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
2017/04/28 jQuery
BootStrap下的弹出框加载select2框架失败的解决方法
2017/08/31 Javascript
Express使用html模板的详细代码
2017/09/18 Javascript
微信小程序textarea层级过高的解决方法
2019/03/04 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
解决vue addRoutes不生效问题
2020/08/04 Javascript
vue 图片裁剪上传组件的实现
2020/11/12 Javascript
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
2018/03/22 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
python字典和json.dumps()的遇到的坑分析
2020/03/11 Python
用 Python 制作地球仪的方法
2020/04/24 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
python如何实现读取并显示图片(不需要图形界面)
2020/07/08 Python
python实现AdaBoost算法的示例
2020/10/03 Python
python sleep和wait对比总结
2021/02/03 Python
深入探究HTML5的History API
2015/07/09 HTML / CSS
DC Shoes官网:美国滑板鞋和服饰品牌
2017/09/03 全球购物
DJI美国:消费类无人机领域的领导者
2018/04/27 全球购物
网络研修随笔感言
2014/02/17 职场文书
弘扬民族精神演讲稿
2014/05/07 职场文书
祝福语集锦:给满月宝宝的祝福语
2019/11/20 职场文书