用Python获取英雄联盟所有皮肤图片
发布日期:2021-05-10 05:01:13 浏览次数:23 分类:精选文章

本文共 1753 字,大约阅读时间需要 5 分钟。

网页DOM结构分析与爬虫实现

网页的DOM结构分析是爬虫的首要任务。我主要关注的是英雄联盟官网中的英雄资料页面,通过检查发现,hero_list.js这个文件直接列出了所有英雄的ID和相关信息。打开这个文件可以发现其结构清晰地amphetamine每个英雄对应一个包含皮肤信息的JS对象。在实际操作中,我发现文件里的文件名并不是按照ID递增的顺序排列,而是以ID编码的方式,这一点一开始没有注意到,导致后续的抓取逻辑需要进行调整。

为了实现对皮肤图片的批量下载,我首先需要读取hero_list.js文件,提取出所有的heroId。然后,拼接出对应的皮肤图片文件路径,并逐个获取图片的下载链接。在实际代码中,我还对皮肤名字进行了一定的处理。由于系统不允许路径中包含携带""特殊字符,我需要将皮肤名字中的“/”字符进行替换,确保生成的文件路径是有效的。

最后,在实现了上述逻辑后,我还自动生成了一个存储所有英雄皮肤图片的文件夹,文件夹名采用英雄的中文姓名作为命名方式。目前的爬虫脚本主要包含以下步骤:文件路径拼接、文件下载、文件路径创建以及皮肤信息处理。

在项目完成后,我认识到自己的代码在很多方面还能有改进之处,比如路径处理的更优化、错误处理的更完善,以及尽可能减少重复请求等等。毕竟,这仅仅是自己作为一个初学者在lease项目实践的成果,依然有很多不足之处,需要在今后的学习和实践中不断优化和完善。

以下是完整的源码供参考:

import requests
import json
import os
import urllib.request
# 定义当前工作目录
current_path = os.path.abspath(os.curdir)
# HeroList.js文件路径
hero_list_url = "https://game.gtimg.cn/images/lol/act/img/js/hero_list.js"
# 获取英雄列表
hero_list_response = requests.get(hero_list_url)
hero_list = json.loads(hero_list_response.text)
# 存储路径
save_path = os.path.join(current_path, "所有皮肤图片")
# 创建保存目录
os.makedirs(save_path)
for hero_data in hero_list:
hero_id = hero_data["heroId"]
hero_response = requests.get(f"https://game.gtimg.cn/images/lol/act/img/js/hero/{hero_id}.js")
hero_info = json.loads(hero_response.text)
hero_name = hero_info["hero"]["name"]
skin_folder = os.path.join(save_path, hero_name)
if not os.path.exists(skin_folder):
os.makedirs(skin_folder)
for skin in hero_info["skins"]:
skin_name = str(skin["name"]).replace("/", "-") # 替换路径符号
skin_url = skin["mainImg"]
if skin_url:
file_name = os.path.join(skin_folder, os.path.basename(skin_url))
urllib.request.urlretrieve(skin_url, file_name)

下载地址:点击这里获取完整源码

本文已成功爬取完所有皮肤图片到本地文件夹中。欢迎在评论区留言交流,或采纳我的文章分享!

上一篇:Redis命令简单总结
下一篇:React-Zmage实现图片放大旋转等操作

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年05月05日 21时42分17秒