42. 疯狂爬取王者荣耀所有皮肤高清海报(文末源码)

news/2025/3/15 16:38:00/

目录

前言

目的

思路

代码实现

1. 导包,部署好环境

2. 伪装请求头

3. 访问英雄列表,获取英雄ID

4. 分别访问各英雄主页,查看图片详情

5. 写入本地文件夹(文件夹自动命名)

完整源码

运行效果

总结


前言

阔别已久,各位粉丝朋友们。

UP前段时间忙于期末和出国事宜,所以很久没有更新我们的爬虫专栏。今天开始我们继续不定期更新一些有趣的小案例,当然,不会很越界,UP本人使用爬虫也是够用即可~爬虫虽好,过度可是会喜提银手镯的!

好了,闲话少叙,我们今天带来的是在王者荣耀官网批量下载所有英雄的皮肤图片,并按英雄名称归类放于同一个文件夹下,效果如图:

怎么样,是不是特别井井有条,并且图片质量是很高的,下面就让我们开始今天的教程~


目的

爬取王者荣耀官网所有英雄的高清皮肤海报


思路

1. 导包,部署好环境

2. 伪装请求头

3. 访问英雄列表,获取英雄ID

4. 分别访问各英雄主页,查看图片详情

5. 写入本地文件夹(文件夹自动命名)


代码实现

1. 导包,部署好环境

# 发送请求的模块 pip install requests
import requests
# 解析html代码的工具 lxml    pip install lxml
from lxml import etree
import os
from time import sleep

2. 伪装请求头

# 伪装自己
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',# 'referer': 'https://pvp.qq.com/web201605/herolist.shtml'
}hero_list_url = 'https://pvp.qq.com/web201605/js/herolist.json'
hero_list_resp = requests.get(hero_list_url, headers=headers, verify=False)

3. 访问英雄列表,获取英雄ID

for h in hero_list_resp.json():ename = h.get('ename')cname = h.get('cname')# 访问英雄主页hero_info_url = f'https://pvp.qq.com/web201605/herodetail/{ename}.shtml'hero_info_resp = requests.get(hero_info_url, headers=headers)hero_info_resp.encoding = 'gbk'e = etree.HTML(hero_info_resp.text)

4. 分别访问各英雄主页,查看图片详情

    names = e.xpath('//ul[@class="pic-pf-list pic-pf-list3"]/@data-imgname')[0]names = [name[0:name.index('&')] for name in names.split('|')]# 发送请求 for i, n in enumerate(names):resp = requests.get(f'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{ename}/{ename}-bigskin-{i + 1}.jpg',headers=headers)# 接收服务器响应的图片(皮肤)

5. 写入本地文件夹(文件夹自动命名)

        # 保存图片(皮肤)if not os.path.exists(f'./13_skins/{cname}'):os.makedirs(f'./13_skins/{cname}')with open(f'./13_skins/{cname}/{n}.jpg', 'wb') as f:f.write(resp.content)print(f'已下载皮肤: {n}')sleep(1)

完整源码

# 发送请求的模块 pip install requests
import requests
# 解析html代码的工具 lxml    pip install lxml
from lxml import etree
import os
from time import sleep# 伪装自己
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',# 'referer': 'https://pvp.qq.com/web201605/herolist.shtml'
}hero_list_url = 'https://pvp.qq.com/web201605/js/herolist.json'
hero_list_resp = requests.get(hero_list_url, headers=headers, verify=False)
# print(hero_list_resp.json())
for h in hero_list_resp.json():ename = h.get('ename')cname = h.get('cname')# 访问英雄主页hero_info_url = f'https://pvp.qq.com/web201605/herodetail/{ename}.shtml'hero_info_resp = requests.get(hero_info_url, headers=headers)hero_info_resp.encoding = 'gbk'e = etree.HTML(hero_info_resp.text)names = e.xpath('//ul[@class="pic-pf-list pic-pf-list3"]/@data-imgname')[0]names = [name[0:name.index('&')] for name in names.split('|')]# 发送请求 for i, n in enumerate(names):resp = requests.get(f'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{ename}/{ename}-bigskin-{i + 1}.jpg',headers=headers)# 接收服务器响应的图片(皮肤)# 保存图片(皮肤)if not os.path.exists(f'./13_skins/{cname}'):os.makedirs(f'./13_skins/{cname}')with open(f'./13_skins/{cname}/{n}.jpg', 'wb') as f:f.write(resp.content)print(f'已下载皮肤: {n}')sleep(1)

运行效果


总结

今天我们学习了如何爬取王者荣耀官网高清皮肤海报,下期想看什么内容欢迎在评论区留言或者私信UP~


http://www.ppmy.cn/news/1018607.html

相关文章

Elasticsearch使用中出现的错误

Elasticsearch使用中出现的错误 1、分页查询异常 在分页的过程中出现了一个问题是当查询的数据超过10000条的时候报了异常: from size must be less than or equal to: [10000]这个问题最快捷的解决方式是增大窗口大小: curl -XPUT http://127.0.0.…

银河麒麟V10 SP3 X86 二进制文件部署 mysql-5.7.29 GTID 半同步复制的双主架构

文章目录 [toc]啰嗦一下mysql 的 AB 复制和 gtid 复制的优缺点AB 复制(Asynchronous Replication)GTID 复制(Global Transaction Identifier Replication) mysql gtid 并行复制和半同步复制的优缺点并行复制(Parallel …

C++学习笔记总结练习:并发编程与多线程

并发编程与多线程 1. 基础知识 C多线程 线程:线程是操作系统能够进行CPU调度的最小单位,它被包含在进程之中,一个进程可包含单个或者多个线程。可以用多个线程去完成一个任务,也可以用多个进程去完成一个任务,它们的…

[Python] Pylance 插件打开 Python 的类型检查

安装 Python 插件 2.打开一个 Python 文件 可以看到右下角有一个花括号和 Python 字样,点击花括号(不是 Python 字样)打开类型检查即可:

MySQL主从复制基于二进制日志的高可用架构指南

前言 在现代数据库架构中,MySQL主从复制技术扮演着重要角色。它不仅可以提升数据库性能和可扩展性,还赋予系统卓越的高可用性和灾难恢复能力。本文将深入剖析MySQL主从复制的内部机制,同时通过一个实际案例,展示其在实际场景中的…

三天吃透Java面试八股文(2023最新整理),面试通过率高达90%

什么样的求职者能够获得面试官的青睐?求职者需要准备哪些内容来面对形形色色的面试官?这两份资料是我在几十场面试中被面试官问到的问题,比其他复制粘贴的面试题强一百倍,堪称全网最强(我不太喜欢“全网最强”这样的字…

Flink 两阶段提交(Two-Phase Commit)协议

Flink 两阶段提交(Two-Phase Commit)是指在 Apache Flink 流处理框架中,为了保证分布式事务的一致性而采用的一种协议。它通常用于在流处理应用中处理跨多个分布式数据源的事务性操作,确保所有参与者(数据源或计算节点…

C语言二进制数据和16进制字符串互转

知识点:结构体中的“伸缩型数组成员”(C99新增) C99新增了一个特性:伸缩型数组成员(flexible array member),利用这项特性声明的结构,其最后一个数组成员具有一些特性。第1个特性是,该数组不会…