王者荣耀图鉴皮肤怎么来的

news2024/11/26 5:45:47

王者荣耀图鉴皮肤怎么来的

最近一个王者荣耀图鉴开源很火

这个项目里面有很多的图片和音效资源,最简单的方法就是利用爬虫技术爬取这些图片资源。

第一步环境准备

  • Pyhton3.12
  • macos系统

第二步查看王者荣耀官网

这些图片资源最简单的来源就是王者荣耀官网网站了
王者荣耀
打开控制台,刷新页面我们会发现一个herolist.json的请求,这就是王者荣耀英雄数据

这里发现接口的字符串编码有问题,暂时忽略不考虑,后面通过代码修正
进入英雄资料页面,发现页面url与herolist.json存在一定的关系

这里的数字和json中的ename一一对应

第三步代码实现

  1. 获取herolist.json的数据
  2. 循环hreolist.json数据抓取每一个ename对应的shtml页面
  3. 获取shtml英雄皮肤图片src
  4. 下载图片图片写入本地文件夹,或者上传cos服务
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests
from bs4 import BeautifulSoup
from urllib import parse
from urllib3.util.retry import Retry
from requests.adapters import HTTPAdapter
import os

session = requests.Session()
retry = Retry(total=5, backoff_factor=0.1, status_forcelist=[500, 502, 503, 504], raise_on_status=False)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)
class Skin(object):
    def __init__(self):
        # 英雄的json数据
        self.hero_url = 'https://pvp.qq.com/web201605/js/herolist.json'
        # 英雄详细页的通用url前缀信息
        self.base_url = 'https://pvp.qq.com/web201605/herodetail/'
        # 英雄详细页url后缀信息
        self.detail_url = ''
        # 图片存储文件夹
        self.img_folder = 'skin'
        # 图片url的通用前缀
        self.skin_url = 'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'
        # 图片url的后缀信息
        self.skin_detail_url = ''

    def get_hero(self):
        """获取英雄的json数据"""
        request = requests.get(self.hero_url)
        hero_list = request.json()
        return hero_list

    def get_hero_skin(self, hero_name, hero_no):
        """获取详细页英雄皮肤展示的信息,并爬图"""
        url = parse.urljoin(self.base_url, self.detail_url)
        request = requests.get(url)
        request.encoding = 'gbk'
        html = request.text
        # 获取皮肤信息的节点
        soup = BeautifulSoup(html, 'lxml')
        skip_list = soup.select('.pic-pf-list3')
        for skin_info in skip_list:
            # 获取皮肤名称
            img_names = skin_info.attrs['data-imgname']
            name_list = img_names.split('|')
            skin_no = 1
            # 循环下载皮肤图片
            for skin_name in name_list:
                self.skin_detail_url = '%s/%s-bigskin-%s.jpg' % (hero_no, hero_no, skin_no)
                skin_no += 1
                img_name = hero_name + '-' + skin_name + '.jpg'
                self.download_skin(img_name)

    def download_skin(self, img_name):
        try:

            """下载皮肤图片"""
            img_url = parse.urljoin(self.skin_url, self.skin_detail_url)
            print(img_url)
            response = session.get(img_url, timeout=(10,27), stream=True)
            response.raise_for_status()
            if response.status_code == 200:
                print('download-%s' % img_name)
                img_path = os.path.join(self.img_folder, img_name)
                with open(img_path, 'wb') as img:
                    for chunk in response.iter_content(chunk_size=8192):
                        if chunk:
                            img.write(chunk)
            else:
                print('img error!')
        except requests.exceptions.ChunkedEncodingError:
            self.download_skin(img_name)
        except requests.exceptions.RequestException:
            print('img error!')

    def make_folder(self):
        """创建图片存储文件夹"""
        if not os.path.exists(self.img_folder):
            os.mkdir(self.img_folder)

    def run(self):
        """脚本执行入口"""
        self.make_folder()
        hero_list = self.get_hero()
        for hero in hero_list:
            hero_no = str(hero['ename'])
            self.detail_url = hero_no + '.shtml'
            hero_name = hero['cname']
            self.get_hero_skin(hero_name, hero_no)


# 程序执行入口
if __name__ == '__main__':
    skin = Skin()
    skin.run()

该demo仅用于学习交流,请勿用于商业用途,否则后果自负。

如果实在搞不定就联系博主吧
在这里插入图片描述

在这里插入图片描述

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

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

相关文章

BFS:FloodFill算法

文章目录 FloodFill算法简介1.图像渲染2.岛屿数量3.岛屿的最大面积4.被围绕的区域总结 FloodFill算法简介 Flood Fill算法是一种用于确定与某个给定节点相连的区域的算法,常用于计算机图形学和图像处理。该算法可以用于诸如填充多边形、检测连通区域等任务。Flood …

淘宝订单物流信息获取:详细操作指南

一、前言 淘宝作为中国最大的电商平台之一,其订单管理系统为商家提供了丰富的接口,用于查询、管理和跟踪订单信息。本指南将详细介绍如何通过淘宝订单接口获取物流信息,帮助商家更好地管理订单和提供优质的物流服务。 二、获取物流信息的步…

低代码开发平台助力审计工作智能化

在数字化转型的浪潮中,低代码平台以其高效、灵活的特性,成为推动审计作业现代化的关键工具。审计作业低代码平台,通过简化开发流程,使得非技术背景的审计人员也能快速构建和部署审计应用,极大地提升了审计效率和质量。…

2024年十大数据集成工具和软件应用场景解析

详细阐述了十大数据集成工具及其优缺点: 数据集成的挑战 在当今的商业环境中,企业常常面临着数据分散、系统孤立的难题。传统的数据集成方式,就像一张复杂的蜘蛛网,难以理顺,令人头痛不已。 数据孤岛: 各个业务系统独立…

idea插件开发之一起来开发个打印方法入参和返回值的插件吧!

写在前面 源码 。 在开发过程中为了调试代码我们就可能就需要知道某个方法入参的值是什么,或者是返回值是什么。此时,我们的解决办法一般都是debug,但是debug的效率说实话其实是不高的,特别是不断的调试,不断的debug。…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十五)

课程地址: 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发 (本篇笔记对应课程第 23 - 24 节) P23《22.Stage模型-基本概念》 一个应用可以有很多的能力,每个能力可以成为一个 Ability Mod…

百元价位真无线蓝牙耳机怎么选?四款宝藏平价机型盘点

在繁忙的现代生活中,真无线蓝牙耳机凭借其便携性、无线连接以及出色的音质,已经成为了许多人的必备配件,面对市场上琳琅满目的产品,如何在百元价位内挑选出一款性价比高、性能出色的真无线蓝牙耳机,确实是一个值得深思…

CATIA入门操作案例——理工男的浪漫:如何画一支玫瑰花送给女朋友?如何画一束玫瑰花?

目录 引出画玫瑰花画中间的花蕾画花瓣在零件设计模式下,厚轮廓画曲面实体 进行圆周阵列,完整径向对花瓣进行倒角再画一层花瓣画叶子在新的几何体里面绘制叶子 叶子阵列画花杆使用肋条画杆子 将两个零件体进行合并 一支玫瑰花画一束玫瑰花先平移一下复制粘…

异步任务使用场景与实践

异步任务使用场景 根据同步/异步方式划分场景,各场景下常用的技术方案如下: 方式实现特点缺点同步HTTP RPC Cache etc.指标:RT、QPS、TPS、缓存命中率 等; 关注(准)实时数据,用户可交互1. 处…

微服务架构-线上治理、线下治理与架构演进

目录 一、线上治理 1.1 概述 1.2 线上预案体系 1.2.1 概述 1.2.2 变更引起的故障 1.2.3 流量和容量变化引起的故障 1.2.4 依赖故障 1.2.5 机房、网络等硬件和环境故障 1.2.6 其他 1.2.7 故障的场景化 1.3 基于Metric的预案自动触发 1.4 治理参数动态调整 1.4.1 举例…

dial tcp 10.96.0.1:443: connect: no route to host

1、创建Pod一直不成功,执行kubectl describe pod runtime-java-c8b465b98-47m82 查看报错 Warning FailedCreatePodSandBox 2m17s kubelet Failed to create pod sandbox: rpc error: code Unknown desc failed to setup network for…

算力之困,大模型何解?

互联网企业选择大模型合作伙伴之时,首要考虑的因素是算力。 大模型本身就是巨量参数“力大砖飞”的结晶,也就是说大模型与大算力密不可分。 发展到今天,国内的大模型在对话层面,已经与GPT-3.5接近,但在复杂指令层面与…

使用nvm安装node.js ,方便管理多个版本的node.js,且程序添加和卸载页面也不会出现多个版本的node.js软件(是一个都不会出现)

首先下载和安装nvm windows 安装 nvm: 需要先把本地安装的Node.js卸载,然后再下载nvm,地址: https://github.com/coreybutler/nvm-windows/releases 一般情况,找到最新版本,然后下载nvm-setup.exe文件就可以…

WACV2024论文3D相关速览48篇

WACV2024 3D相关论文阅读 Paper1 Self-Supervised Edge Detection Reconstruction for Topology-Informed 3D Axon Segmentation and Centerline Detection 摘要小结: 许多基于机器学习的轴突追踪方法依赖于带有分割标签的图像数据集。这需要领域专家的手动标注,既…

DP:完全背包+多重背包问题

完全背包和01背包的区别就是&#xff1a;可以多次选 一、完全背包&#xff08;模版&#xff09; 【模板】完全背包_牛客题霸_牛客网 #include <iostream> #include<string.h> using namespace std; const int N1001; int n,V,w[N],v[N],dp[N][N]; //dp[i][j]表示…

从社交网络到元宇宙:Facebook的战略转型

随着科技的迅猛发展和数字化时代的深入&#xff0c;社交网络已不再局限于简单的信息交流和社交互动&#xff0c;而是逐步向更广阔、更深远的虚拟现实空间——元宇宙&#xff08;Metaverse&#xff09;转变。作为全球最大的社交网络平台之一&#xff0c;Facebook正在积极推动这一…

从新手小白到红酒大咖:解锁红酒品鉴的终极秘籍,升级之路全攻略

在五彩斑斓的饮品世界中&#xff0c;红酒以其深邃的色泽、丰富的口感和悠久的历史&#xff0c;吸引了无数人的目光。对于红酒的初学者来说&#xff0c;从小白到品鉴师的道路或许充满了未知与挑战&#xff0c;但只要掌握了正确的知识和方法&#xff0c;就能够轻松踏入这个美妙的…

RAG实操教程langchain+Milvus向量数据库创建你的本地知识库 二

Miluvs 向量数据库 关于 Milvui 可以参考我的前两篇文章 • 一篇文章带你学会向量数据库Milvus&#xff08;一&#xff09;[1]• 一篇文章带你学会向量数据库Milvus&#xff08;二&#xff09;[2] 下面我们安装 pymilvus 库 pip install --upgrade --quiet pymilvus如果你…

SpringBoot整合justauth实现多种方式的第三方登陆

目录 0.准备工作 1.引入依赖 2.yml文件 3. Controller代码 4.效果 参考 0.准备工作 你需要获取三方登陆的client-id和client-secret 以github为例 申请地址&#xff1a;Sign in to GitHub GitHub 1.引入依赖 <?xml version"1.0" encoding"UTF-8&quo…

代码走查的一个实例

1996年6月23日至7月1日&#xff0c;我被点名到四川某单位协助排查某系统的技术问题。 我不懂该系统的原理&#xff0c;也不懂硬件&#xff0c;只能从软件角度分析问题。 那时&#xff0c;我所在单位已经为一家美国公司做了3年的软件第三方独立验证和测试&#xff0c;从中学到…