当前位置: 首页 > news >正文

使用Python脚本下载王者**游戏英雄皮肤原画图片(含源码)

前言

出于美术借鉴学习的目的,需要该游戏的英雄皮肤原画图片,所以进行了分析和本地下载,代码导入了必要的库:os、re、urljoin、requests和lxml.etree。
代码和下载资源仅供学习使用,版权&著作权归原作者所有!运行时请遵守网站相关规定,控制请求频率。出现侵权以及经济纠纷后果自负

在这里插入图片描述

在这里插入图片描述
下载的图片基本是 1920*882的尺寸,大小在几百KB – 1MB范围内:

在这里插入图片描述

实现过程

其核心思路:是访问英雄列表接口获取所有英雄数据,遍历每个英雄:创建对应的存储目录,解析英雄详情页获取皮肤信息,批量下载所有皮肤图片。

创建目录

base_dir = os.path.join('WangZhe_Imgs')
os.makedirs(base_dir, exist_ok=True)  # 自动创建基础目录
hero_dir = os.path.join(base_dir, cname)
os.makedirs(hero_dir, exist_ok=True)  # 创建英雄专属目录

示例:英雄"孙悟空"的皮肤会保存在WangZhe_Imgs/孙悟空/目录下

详情页

resp = requests.get(hurl)  # 请求英雄详情页
resp.encoding = resp.apparent_encoding  # 自动检测编码
curr = etree.HTML(resp.text)  # 构建HTML解析器

获取图URL

src = curr.xpath("//div[@class='zk-con1 zk-con']/@style")
url_part = style.split('url(')[1].split(')')[0].strip('\'"')
base_img_url = urljoin(hurl, url_part)  # 拼接完整URL

最终得到基础URL示例:https://***/…/109-bigskin-1.jpg

处理URL

base_part, ext_part = base_img_url.split('-1.', 1)
ext = f".{ext_part.split('?')[0]}"  # 提取扩展名并去除参数

获取图片名

pic_pf = curr.xpath("//div[@class='pic-pf']/ul/@data-imgname")
skin_names = pic_pf[0].split('|')

下载所有

for idx, skin_name in enumerate(skin_names, 1):
    skin_url = f"{base_part}-{idx}{ext}"  # 生成实际图片URL
    safe_name = re.sub(r'[\\/*?:"<>|]', '_', skin_name)  # 清理非法字符
    resp_img = requests.get(skin_url)

代码

完整代码如下:

import os
import re
from urllib.parse import urljoin
import requests
from lxml import etree


def download_images(hurl, cname):
    # 创建基础目录和英雄目录
    base_dir = os.path.join('WangZhe_Imgs')
    os.makedirs(base_dir, exist_ok=True)
    hero_dir = os.path.join(base_dir, cname)
    os.makedirs(hero_dir, exist_ok=True)

    resp = requests.get(hurl)
    if resp.status_code != 200:
        print(f"请求失败,状态码:{resp.status_code},英雄:{cname}")
        return
    resp.encoding = resp.apparent_encoding
    curr = etree.HTML(resp.text)

    # 提取背景图片URL
    src = curr.xpath("//div[@class='zk-con1 zk-con']/@style")
    if not src:
        print(f"未找到皮肤图片,英雄:{cname}")
        return
    style = src[0]
    if 'url(' not in style:
        print(f"样式格式错误,英雄:{cname}")
        return
    url_part = style.split('url(')[1].split(')')[0].strip('\'"')
    base_img_url = urljoin(hurl, url_part)

    # 处理图片URL格式
    if '-1.' not in base_img_url:
        print(f"图片URL格式不符:{base_img_url},英雄:{cname}")
        return
    base_part, ext_part = base_img_url.split('-1.', 1)
    ext = f".{ext_part.split('?')[0]}"  # 去除查询参数

    # 提取皮肤名称
    pic_pf = curr.xpath("//div[@class='pic-pf']/ul/@data-imgname")
    if not pic_pf:
        print(f"未找到皮肤名称,英雄:{cname}")
        return
    skin_names = pic_pf[0].split('|')

    # 下载皮肤图片
    for idx, skin_name in enumerate(skin_names, 1):
        skin_url = f"{base_part}-{idx}{ext}"
        # 清理非法字符
        safe_name = re.sub(r'[\\/*?:"<>|]', '_', skin_name)
        save_path = os.path.join(hero_dir, f"{safe_name}.jpg")
        # 下载并保存
        resp_img = requests.get(skin_url)
        if resp_img.status_code == 200:
            with open(save_path, 'wb') as f:
                f.write(resp_img.content)
            print(f"下载成功:{cname} - {safe_name}")
        else:
            print(f"下载失败:{skin_url}")


def main(url):
    resp = requests.get(url)
    if resp.status_code != 200:
        print("获取英雄列表失败")
        return
    for hero in resp.json():
        hero_url = f"https://pvp.秋秋.com/web201605/herodetail/{hero['ename']}.shtml"
        download_images(hero_url, hero['cname'])


if __name__ == '__main__':
    url = 'https://pvp.秋秋.com/web201605/js/herolist.json'
main(url)

运行在这里插入图片描述

再次强调
以上代码和下载资源仅供学习使用,版权&著作权归原作者所有!运行时请遵守网站相关规定,控制请求频率。出现侵权以及经济纠纷后果自负

相关文章:

  • JavaScript表单介绍
  • 发现一个挺好的项目,可以在springboot项目中快速接入DeepSeek API,有需要的可以尝试一下
  • 从0到1:STM32温控系统开发踩坑指南
  • http 响应码影响 video 标签播放视频
  • 关于JavaScript中的事件
  • 【Linux-命令】
  • Unity 开发资源汇总 | 插件 | 模型 | 源码(不断更新中,建议收藏)
  • 线上就医全流程医药机构接入文档接口代码-医保就医接口php-demo版本
  • 基于SSM+Vue的智能汽车租赁平台设计和实现(源码+文档+部署讲解)
  • 亚马逊云科技 re:Invent 2023:科技前沿风向标,探索未来云计算之窗
  • c# -01新属性-模式匹配、弃元、析构元组和其他类型
  • zookeeper有序临时结点实现公平锁的实践例子
  • Python 中从零开始的随机梯度下降
  • Java获取html标签内容中的图片链接
  • C#结合html2canvas生成切割图片并导出到PDF
  • JavaScript设计模式 -- 代理模式
  • MySQL基本操作——包含增删查改(环境为Ubuntu20.04,MySQL5.7.42)
  • DVWA-DOM型XSS全等级绕过方法
  • STM32 HAL库 UART串口发送数据实验
  • 新数据结构(10)——Java抽象类和接口
  • 库里22分赢下抢七大战,火箭10年难破“火勇大战”的魔咒
  • 让党的理论“飞入寻常百姓家”,他如何做到有新意?
  • 多地政府机关食堂五一“开门迎客”:怎么看这场“宠粉”大戏
  • 中虎跳峡封闭仍有游客逆行打卡,景区:专人值守防意外
  • 对华小额包裹免税取消=更高价格+更慢物流,美消费者为关税政策买单
  • “五一”假期首日:国铁南宁局发送旅客81.7万人次