发现有的皮肤名字是带着\\的,保存不到文件夹中,下面是改进的版本:
import requests
from fake_useragent import UserAgent
from urllib.request import urlretrieve
from os import makedirs, path
from time import sleep
def ensure_directory_exists(directory):
if not path.exists(directory):
makedirs(directory)
def sanitize_filename(filename):
# 将文件名中的特殊字符替换为下划线
return filename.replace(" ", "_").replace("/", "_").replace("\\", "_")
def get_hero_img(hero_id=1, hero_name=""):
url = f'https://game.gtimg.cn/images/lol/act/img/js/hero/{hero_id}.js'
headers = {'User-Agent': UserAgent().chrome}
resp = requests.get(url, headers=headers)
hero_dir = path.join('./_反爬和反反爬/imgs/lolskin', sanitize_filename(hero_name))
ensure_directory_exists(hero_dir)
for sk in resp.json().get('skins', []):
if sk.get("mainImg"):
print(f'皮肤名:{sk.get("name")} 皮肤下载地址: {sk.get("mainImg")}')
img_filename = sanitize_filename(sk.get("name")) + '.jpg'
img_path = path.join(hero_dir, img_filename)
urlretrieve(sk.get("mainImg"), filename=img_path)
sleep(0.5)
# ...(其余代码保持不变)
def get_hero_list():
url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js'
headers = {'User-Agent': UserAgent().chrome}
resp = requests.get(url, headers=headers)
for h in resp.json().get('hero', []):
hero_id = h.get('heroId')
hero_name = h.get('name')
yield (hero_id, hero_name)
if __name__ == '__main__':
for hero_id, hero_name in get_hero_list():
print(f'=========正在下载的: 英雄名:{hero_name}')
get_hero_img(hero_id, hero_name)
print(f'=====下载完成:英雄:{hero_name}')