【小白必看】使用Python批量下载英雄联盟皮肤图片的技术实现

news2024/12/23 18:25:36

文章目录

  • 前言
  • 运行效果截图
  • 导入必要的模块和库
  • 定义常量和变量
  • 获取所有英雄的名称
  • 遍历每个英雄
  • 遍历每个英雄的皮肤
  • 完整代码
  • 结束语

在这里插入图片描述

前言

英雄联盟是一款备受喜爱的团队对战游戏,游戏中每位英雄都有各种精美的皮肤供玩家选择。本文将介绍一个使用Python编写的英雄联盟皮肤下载器,可以快速获取所有英雄的皮肤图片,让您更方便地欣赏和收藏这些皮肤。

运行效果截图

在这里插入图片描述

导入必要的模块和库

在这里插入图片描述

import requests     # pip install requests
import re
from time import sleep
import os

定义常量和变量

在这里插入图片描述

all_hero_url ='https://lol.qq.com/biz/hero/champion.js'
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}
  • all_hero_url:英雄URL地址
  • headers:请求头,用于模拟浏览器发送请求

获取所有英雄的名称

在这里插入图片描述

all_hero_js_resp = requests.get(all_hero_url,headers = headers)
all_hero_name = re.findall(r'"\d+?":"(\w+?)"',all_hero_js_resp.text)
  • 发送GET请求,获取英雄信息的JavaScript文件
  • 通过正则表达式提取所有英雄的名称,并存储在all_hero_name列表中

遍历每个英雄

在这里插入图片描述

for n in all_hero_name:
    sleep(1)
    hero_info_js_url =f'https://lol.qq.com/biz/hero/{n}.js'
    hero_info_js_resp = requests.get(hero_info_js_url,headers=headers)
    hero_info_js = hero_info_js_resp.text
    hero_ids = re.findall(r'"id":"(\d+?)"',hero_info_js)
    hero_names =  re.findall(r'"name":"(.+?)".+?"chrom',hero_info_js)
  • 遍历所有英雄的名称
  • 构造每个英雄的详细信息JavaScript文件URL
  • 发送GET请求,获取英雄详细信息的JavaScript文件
  • 通过正则表达式提取英雄ID和皮肤名称,并分别存储在hero_idshero_names列表中

遍历每个英雄的皮肤

for id,name in zip(hero_ids,hero_names):
    img_url =f'https://game.gtimg.cn/images/lol/act/img/skin/big{id}.jpg'
    # 发送请求
    img_resp = requests.get(img_url,headers=headers)
    name = name.encode().decode('unicode_escape')
    name = name.replace('/','')
    name = name.replace('\\','')
    print(f'正在下载{n}的:{name}皮肤')
    if not os.path.exists(f'./img/{n}'):
        os.mkdir(f'./img/{n}')
    with open(f'./img/{n}/{name}.jpg','wb') as f:
        f.write(img_resp.content)
    sleep(1)
  • 遍历每个皮肤的ID和名称
  • 构造每个皮肤的图片URL
  • 发送GET请求,获取皮肤图片内容
  • 对皮肤名称进行一些处理(编码转换、去除特殊字符)
  • 打印下载信息
  • 检查是否存在对应英雄的文件夹,如果不存在则创建
  • 将皮肤图片保存到文件夹中
  • 等待一秒,继续下载下一个皮肤

完整代码

import requests     # 导入requests模块,用于发送HTTP请求
import re           # 导入re模块,用于正则表达式匹配
from time import sleep   # 导入sleep函数,用于休眠

# 定义常量和变量
all_hero_url ='https://lol.qq.com/biz/hero/champion.js'   # 所有英雄URL地址
headers = {
   'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
}   # 请求头,用于模拟浏览器发送请求

# 获取所有英雄的名称
all_hero_js_resp = requests.get(all_hero_url,headers = headers)   # 发送GET请求,获取英雄信息的JavaScript文件
all_hero_name = re.findall(r'"\d+?":"(\w+?)"',all_hero_js_resp.text)   # 通过正则表达式提取所有英雄的名称,并存储在all_hero_name列表中

# 遍历每个英雄
for n in all_hero_name:
   sleep(1)   # 休眠1秒,避免请求频率过高被服务器拦截
   hero_info_js_url =f'https://lol.qq.com/biz/hero/{n}.js'   # 构造每个英雄的详细信息JavaScript文件URL
   hero_info_js_resp = requests.get(hero_info_js_url,headers=headers)   # 发送GET请求,获取英雄详细信息的JavaScript文件
   hero_info_js = hero_info_js_resp.text   # 获取JavaScript文件的内容
   hero_ids = re.findall(r'"id":"(\d+?)"',hero_info_js)   # 通过正则表达式提取英雄ID,并存储在hero_ids列表中
   hero_names =  re.findall(r'"name":"(.+?)".+?"chrom',hero_info_js)   # 通过正则表达式提取皮肤名称,并存储在hero_names列表中

# 遍历每个英雄的皮肤
for id,name in zip(hero_ids,hero_names):
   img_url =f'https://game.gtimg.cn/images/lol/act/img/skin/big{id}.jpg'   # 构造每个皮肤的图片URL
   img_resp = requests.get(img_url,headers=headers)   # 发送GET请求,获取皮肤图片内容
   name = name.encode().decode('unicode_escape')   # 对皮肤名称进行编码转换,解决中文字符显示问题
   name = name.replace('/','')   # 去除名称中的斜杠字符
   name = name.replace('\\','')   # 去除名称中的反斜杠字符
   print(f'正在下载{n}的:{name}皮肤')
   if not os.path.exists(f'./img/{n}'):
       os.mkdir(f'./img/{n}')   # 检查是否存在对应英雄的文件夹,如果不存在则创建
   with open(f'./img/{n}/{name}.jpg','wb') as f:   # 将皮肤图片保存到文件夹中
       f.write(img_resp.content)
   sleep(1)   # 休眠1秒,避免请求频率过高被服务器拦截
  • 第1行:导入requests模块,用于发送HTTP请求。
  • 第2行:导入re模块,用于正则表达式匹配。
  • 第3行:从time模块中导入sleep函数,用于程序休眠。
  • 第6行:定义常量all_hero_url,表示所有英雄URL地址。
  • 第7行:定义headers字典,包含用户代理信息,用于模拟浏览器发送请求。
  • 第10行:发送GET请求获取英雄信息的JavaScript文件,并将响应结果赋值给all_hero_js_resp
  • 第11行:使用正则表达式提取所有英雄的名称,并存储在all_hero_name列表中。
  • 第15行:使用for循环遍历每个英雄的名称。
  • 第16行:休眠1秒,以避免请求频率过高被服务器拦截。
  • 第17行:构造每个英雄的详细信息JavaScript文件URL。
  • 第18行:发送GET请求获取英雄详细信息的JavaScript文件,并将响应结果赋值给hero_info_js_resp
  • 第19行:获取JavaScript文件的内容。
  • 第20行:使用正则表达式提取英雄ID,并存储在hero_ids列表中。
  • 第21行:使用正则表达式提取皮肤名称,并存储在hero_names列表中。
  • 第25行:使用for循环遍历每个英雄的皮肤。
  • 第26行:构造每个皮肤的图片URL。
  • 第27行:发送GET请求获取皮肤图片内容,并将响应结果赋值给img_resp
  • 第28行:对皮肤名称进行编码转换,解决中文字符显示问题。
  • 第29行:去除名称中的斜杠字符。
  • 第30行:去除名称中的反斜杠字符。
  • 第31行:打印下载信息。
  • 第32-34行:检查是否存在对应英雄的文件夹,如果不存在则创建。
  • 第35行:将皮肤图片保存到对应的文件夹中。
  • 第36行:休眠1秒,以避免请求频率过高被服务器拦截。

代码使用Python的requests模块发送HTTP请求,使用re模块进行正则表达式匹配。通过解析游戏官网的数据接口,获取英雄和皮肤信息,并保存为本地文件。其中,sleep函数用于控制请求间隔,避免频繁请求导致被服务器拦截。代码还涉及文件和文件夹的操作,如创建文件夹、保存图片文件等。整体上,这段代码是一个简单的网络爬虫,用于批量下载英雄联盟的皮肤图片。

结束语

英雄联盟皮肤下载器是一个简单而实用的工具,让您能够快速获取所有英雄的皮肤图片。通过运行代码,您可以轻松地收集和保存英雄联盟中所有英雄的各种精美皮肤,无需手动下载。这个工具不仅适用于英雄联盟的玩家,也可以作为收藏者的便利工具,帮助您更好地欣赏和管理这些精美的皮肤设计。希望本文介绍的英雄联盟皮肤下载器对您有所帮助,让您在游戏中尽情享受每位英雄的独特魅力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/797382.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计数型信号量

回顾上节所讲: Q: 什么是信号量? A: 信号量(Semaphore),是在多任务环境下使用的一种机制,是可以用来保证两个或多个关键代码段不被并发调用。 信号量这个名字,我们可以把它拆分来看,…

本地Git仓库和GitHub仓库SSH传输

SSH创建命令解释 ssh-keygen 用于创建密钥的程序 -m PEM 将密钥的格式设为 PEM -t rsa 要创建的密钥类型,本例中为 RSA 格式 -b 4096 密钥的位数,本例中为 4096 -C “azureusermyserver” 追加到公钥文件末尾以便于识别的注释。 通常以电子邮件地址…

【Android常见问题(五)】- Flutter项目性能优化

文章目录 知识回顾前言源码分析1. 渲染过程2. 分析工具3. 优化方法合理使用const关键词合理使用组件管理着色器编译垃圾 知识回顾 前言 项目迭代开发一定程度后,性能优化是重中之重,其中包括了包体积,UI 渲染、交互等多个方面。 通过 Flutt…

ssm停车场信息管理系统java车辆车位收费jsp源代码mysql

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当做编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 ssm停车场信息管理系统 系统有2权限:管理…

浏览器端代理proxy 解决跨域

一.环境:使用expresshttp-proxy-middleware 直接上代码 // include dependencies const express require( express);//node内置的path模块导入 const path require("path")const { createProxyMiddleware } require( http-proxy-middleware); // 需要代理后端服…

Linux6.12 Docker 数据管理和镜像的创建

文章目录 计算机系统5G云计算第四章 LINUX Docker 数据管理和镜像的创建一、Docker 的数据管理1.数据卷2.数据卷容器 二、容器互联(使用centos镜像)三、Docker 镜像的创建1.基于现有镜像创建1)首先启动一个镜像,在容器里做修改2&a…

通达信指标回测系统的高级玩法:优化参数

#1.本期主要的学习内容: A.找到最优的选股信号,即最佳参数的寻找方法。 B.学会使用通达信内置的(程序交易评测系统)指标回测系统。 #2.程序交易评测系统的打开方法 选择公式——程序交易评测系统 快捷键:CTRLS 键…

了解Unity编辑器之组件篇Event(七)

Event:用于在对象之间进行通信和交互的机制。它可以帮助你实现触发和响应特定动作或状态的逻辑一、Event System:用于处理 UI 事件的系统组件 First Selected 属性:定义了在场景加载或 UI 激活时,哪个 UI 元素将成为首选的选中元素…

动态内存管理学习分享

动态内存管理学习分享 1. 为什么存在动态内存分配2. 动态内存函数的介绍2.1 [malloc](https://legacy.cplusplus.com/reference/cstdlib/malloc/?kwmalloc)和[free](https://legacy.cplusplus.com/reference/cstdlib/free/?kwfree)2.1.1 实例 2.2 [calloc](https://legacy.cp…

TikTok标签观看量破347亿次!芭比妆容蕴藏巨大商机!

据外媒报道,随着真人版电影《芭比》的上映,英国在线市场上与芭比美容产品的搜索量急剧上升。芭比娃娃成为许多人共有的童年记忆,也成为了独树一帜的文化标志。 TikTok标签观看量破347亿次!芭比妆容蕴藏巨大商机! 英国…

麒麟信安携手兆芯、信创桥发布信创联合解决方案,合力推动行业信创加速落地

近年来,加快构建自主创新基础软硬件生态已成为保障我国信息安全的重要一环,优先选择基于自主安全技术路线的国产芯片、操作系统等基础软硬件及关键业务应用软件已成为行业共识。但由于当前wintel体系下的部分复杂应用暂时难以迁移至自主平台,…

Java BIO、NIO、AIO

操作系统中的 I/O 以上是 Java 对操作系统的各种 IO 模型的封装,【文件的输入、输出】在文件处理时,其实依赖操作系统层面的 IO 操作实现的。【把磁盘的数据读到内存种】操作系统中的 IO 有 5 种: 阻塞、 非阻塞、【轮询】 异步、 IO复…

Linux-Shell

1.什么是Bash shell(壳) Bash Shell是一个命令解释器,它在操作系统的最外层,负责用户程序与内核进行交互操作的一种接口,将用户输入的命令翻译给操作系统,并将处理后的结果输出至屏幕。 通过xshell连接,就是打开了一…

精益生产管理工具有哪些?3大必备的精益管理软件!

​企业往往需要管理成千上万的数据,并保证整个管理过程的效率和质量,因此企业往往需要用到一些高效的管理软件,以应对管理过程中的各种问题。今天针对这个问题,与大家分享3大必备的精益管理软件,相信你在工作中一定能用…

为什么新版内核将进程pid管理从bitmap替换成了radix-tree?

第一次写进程创建的时候我使用的内核版本还是 3.10 的版本。在这个版本里已分配的进程 pid 号是用 bitmap 来存储的。但在 5.4 和 6.1 版本里,发现进程 pid 号管理实现已经从 bitmap 替换成了基数树(radix-tree)。后来翻了下版本更新历史&…

springboot项目新增子module

1. 拉取项目 2. file-new-module 3. 选择版本 4. 1-2-3-4 5. 注释请求统一前缀 (SwaggerConfig.java)

CSDN增加挂饰

就是添加一些代码即可&#xff1a; 添加代码&#xff1a; <div> <p> </p><span style"color:#A67D3D;">个人网站&#xff1a;</span> <img src"https://dezeming.top/wp-content/uploads/2022/07/Dezeming-261x300.png"…

UE使用UnLua(二)

1.前言 最近也是比较忙&#xff0c;忘了来更新了&#xff0c;好多都是开了头断更的&#xff08;狗头&#xff09;&#xff0c;今天抽空再更一篇&#xff01;&#xff01; 这篇讲一下在UnLua中覆盖蓝图事件&#xff08;函数&#xff09;&#xff0c;及按钮、文本控件的一些使用…

多线程———生产者和消费者(等待唤醒机制)彻底理解以及代码实现

目录 一、何为等待唤醒机制(生产者消费者模式)&#xff1f; 如何实现等待唤醒机制&#xff1f; 二、等待唤醒机制(生产者消费者模式)代码实现&#xff1a; 1、生产者代码&#xff1a; 2.桌子代码&#xff08;控制生产者和消费者&#xff09;&#xff1a; 3.消费者代码&am…

Simulink仿真模块 - Bus Selector

us Selector:从传入总线中选择元素 在仿真库中的位置为:Simulink / Commonly Used Blocks Simulink / Signal Routing HDL Coder / Signal Routing 模型为: 说明 Bus Selector 模块输出您从输入总线选择的元素。该模块可以单独输出所选的各元素或在一个新的虚拟总线中输出所…