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

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

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

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

第一步环境准备

  • 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 ossession = 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_listdef 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 += 1img_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.mzph.cn/bicheng/31294.shtml

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

相关文章

【FPGA + Nvidia/算能GPU+AI】自动驾驶多核异构实现 16路车载摄像头实时AI分析解决方案

基于 Xilinx 公司ZYNQ Ultrascale MPSoC系列 FPGA 芯片设计,应用于无人驾驶、慢速特种车及数据采集车、车载仿真测试系统等自动驾驶领域 自动驾驶:16通道车载摄像头PCIE采集卡方案。 16 通道摄像头 最多支持 16 通道 GMSL1/2 摄像头输入 8MP 摄像头 最…

MyBatisplus使用报错--Invalid bound statement

报错如下 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.lotus.mybatis.mapper.UserMapper.selectListat org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235)at com.baomidou.mybatisplus.cor…

ModelScope联手OpenDataLab:直接调用7000+开源数据集,赋能AI模型加速研发

在人工智能的演进历程中&#xff0c;数据和模型的整合是推动技术发展的核心动力。随着AI技术的不断进步&#xff0c;整合各类关键资源&#xff0c;构建一个高效、协同的开发环境&#xff0c;已成为加速创新应用发展的关键。 基于这一理念&#xff0c;OpenDataLab浦数与ModelSc…

python基础篇(4):range语句

1 功能介绍 range语句的功能是获得一个数字序列&#xff08;可迭代类型的一种&#xff09; 2 语法 语法1&#xff1a; range(num) 获取一个从0开始&#xff0c;到num结束的数字序列&#xff08;不含num本身&#xff09; 如range(5)取得的数据是&#xff1a;[0, 1, 2, 3, 4…

在华为服务器上编译C++工程的若干错误以及排查方法和解决方法记录

目录 1 报错 2 查找错误原因 2.1 方法一&#xff1a;ldd命令 2.2 方法二&#xff1a;警告信息里面 3 解决错误 3.1 libpng16.so.16 和 libbrotlidec.so.1 问题 3.2 libdevmmap.so 和 libslog.so库问题 3.3 剩余错误 3.3.1 libacllite.so错误解决 3.3.2 libtaclstream…

通过自定义分配器解决 ZGC中的碎片问题

1.问题 ZGC 和其他垃圾收集器通常使用碰撞指针分配&#xff0c;这对于顺序分配很有效&#xff0c;但随着时间的推移会导致碎片化。当产生无法轻松重用的内存间隙时&#xff0c;就会发生碎片化&#xff0c;这需要昂贵的活动对象重新定位。这项研究的目标是通过使用基于空闲列表…

LCP 61. 气温变化趋势

题目 力扣城计划在两地设立「力扣嘉年华」的分会场&#xff0c;气象小组正在分析两地区的气温变化趋势&#xff0c;对于第 i ~ (i1) 天的气温变化趋势&#xff0c;将根据以下规则判断&#xff1a; 若第 i1 天的气温 高于 第 i 天&#xff0c;为 上升 趋势若第 i1 天的气温 等…

Flash页、扇区、块的区别

文章目录 前言玩转Flash的小知识一、页(Page)二、扇区(Sector)三、块(Block)总结存储基础知识 瑞萨芯片简介(片上资源分配)和工具链使用 前言 FLASH 存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速…

用java写一个二叉树翻转

class TreeNode {int val;TreeNode left, right;TreeNode(int val) {this.val val;left right null;} }public class BinaryTree {TreeNode root;// 递归翻转二叉树public TreeNode invertTree(TreeNode root) {if (root null) {return null;}// 递归翻转左子树和右子树Tre…

SpringBoot测试实践

测试按照粒度可分为3层&#xff1a; 单元测试&#xff1a;单元测试&#xff08;Unit Testing&#xff09;又称为模块测试 &#xff0c;是针对程序模块&#xff08;软件设计的最小单位&#xff09;来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中…

【自动驾驶】ROS小车系统、运动底盘的运动学分析和串口通信控制

文章目录 小车组成轮式运动底盘的组成轮式运动底盘的分类轮式机器人的控制方式感知传感器ROS决策主控ROS介绍ROS的坐标系ROS的单位机器人电气连接变压模块运动底盘的电气连接ROS主控与传感器的电气连接ROS主控和STM32控制器两种控制器的功能运动底盘基本组成电池电机控制器与驱…

WPF将dll文件嵌入到exe文件中

WPF将dll文件嵌入到exe文件中 第一步&#xff1a;打开.csproj文件&#xff0c;在Import节点后添加如下代码&#xff1a; <Target Name"AfterResolveReferences"><ItemGroup><EmbeddedResource Include"(ReferenceCopyLocalPaths)" Condit…

AI视频教程下载-用LangChain 开发 OpenAI、 LLAMA 、 Gemini 等AI应用

LangChain MasterClass- OpenAI LLAMA 2 GPT LLM Apps__ Python&#xff08;LangChain MasterClass-Develop 7 OpenAI LLM Apps using Python&#xff09; 探索LangChain、Pinecone、OpenAI、LLAMA 2及Google Gemini Pro LLM在现实世界中的应用。构建AI应用——拥抱脸&#xff…

写一个可以批量修改图片分辨率的工具

说在前面 &#x1f388;在视觉内容至关重要的今天&#xff0c;图片尺寸的调整对于网站加载速度和用户体验有着直接影响。本文介绍的Node.js工具&#xff0c;通过简单的命令行操作&#xff0c;允许用户批量调整图片尺寸&#xff0c;支持单张图片和整个目录的操作&#xff0c;提供…

逆向学习网络篇:数据传输和交换过程

本节课在线学习视频&#xff08;网盘地址&#xff0c;保存后即可免费观看&#xff09;&#xff1a; ​​https://pan.quark.cn/s/3d8ae684d031​​ 网络技术是现代信息社会的基础&#xff0c;它涉及数据传输、交换和存储等多个方面。本文将深入探讨网络中的数据传输和交换过程…

【机器学习】---无监督学习

引言 在机器学习的广阔领域中&#xff0c;无监督学习扮演着至关重要的角色。不同于有监督学习&#xff0c;无监督学习处理的是没有标签的数据集&#xff0c;即我们不知道每个数据点的正确答案或分类。然而&#xff0c;这并不意味着无监督学习无法为我们提供有价值的信息。相反…

DDOS攻击会造成哪些问题

DDOS攻击是我们日常生活中比较常见的一种网络攻击&#xff0c;DDOS攻击的全称为分布式拒绝服务攻击&#xff0c;游戏行业则是DDOS攻击的重灾区&#xff0c;本文主要来给大家讲解一下DDOS攻击会给业务造成哪些问题吧&#xff01; DDOS攻击是攻击者利用大量的恶意请求占用了目标服…

AI音乐:创新引擎还是创意终结者?

✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您的点赞、关注、收藏、评论&#xff0c;是对我最大…

利用nodejs实现图片上传后端,并实现回显

![[Pasted image 20240617093358.png]] 首先准备好前端简单的页面结构 <h1>图片上传</h1> <img class"img" src"" /> <form action""><input id"input" type"file" /><button id"bt…

学生管理系统更新(账号系统)

展示 头文件 #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h>//输入输出函数 #include<stdlib.h>//动态分配函数和随机函数 #include<windows.h>//控制台程序&#xff0c;用来实现cmd指令&#xff0c;title指令&#xff0c;cls指令等等 …