Rallan 发表于 2025-6-17 15:24:30

王者荣耀壁纸爬取

#导入相关库
import re
import requests
from bs4 import BeautifulSoup
import os
import urllib3
# 禁用 InsecureRequestWarning 警告,防止报错误
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# 建立保存路径
path = r'd:\王者荣耀壁纸'

# 下载函数
def download(url, path, name, hero_name):
    hero_dir = os.path.join(path, hero_name)
    if not os.path.exists(hero_dir):
      os.makedirs(hero_dir)
    try:
      response = requests.get(url, verify=False)
      response.raise_for_status()   #报错4xx——5xx时报错
      with open(os.path.join(hero_dir, f"{name}.jpg"), "wb") as f:
            f.write(response.content)
            print(f"已下载 《{name}》 图片")
    except requests.RequestException as e:
      print(f"下载图片失败:{e}")

# 单个英雄的所有皮肤图片URL、名字、编号
def get_single_hero_list(hero_id, hero_name, id_name):
    hero_url = f"https://pvp.qq.com/web201605/herodetail/{id_name}.shtml"
    try:
      response = requests.get(hero_url, verify=False)
      response.raise_for_status()#报错4xx——5xx时报错
      response.encoding = "gbk"      #转码
      soup = BeautifulSoup(response.text, "html.parser")
      name_data = soup.find("ul", class_="pic-pf-list pic-pf-list3").get("data-imgname")
      name_list = re.sub(r'&\d+', '', name_data)# 使用r前缀修正正则表达式
      hero_name_list = name_list.split("|")

      for num, name in enumerate(hero_name_list):#枚举法:数字和皮肤名字同时提取
            num += 1
            url = f"https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{hero_id}/{hero_id}-bigskin-{num}.jpg"
            download(url, path, name, hero_name)
    except requests.RequestException as e:
      print(f"获取英雄详情失败:{e}")
    except AttributeError as e:
      print(f"解析英雄详情页面失败:{e}")

# 获取所有英雄目录
def get_main():
    hero_list_url = "https://pvp.qq.com/web201605/js/herolist.json"
    try:
      response = requests.get(hero_list_url, verify=False)
      response.raise_for_status()#报错4xx——5xx时报错
      heroes = response.json()

      for hero in heroes:
            hero_id = hero["ename"]
            hero_name = hero["cname"]
            id_name = hero.get("id_name", hero_id) # 如果没有"id_name",使用"ename"
            get_single_hero_list(hero_id, hero_name, id_name)
    except requests.RequestException as e:
      print(f"获取英雄列表失败:{e}")

if __name__ == '__main__':
    get_main()
    print("下载完成")
#读取顺序为:

# 1 :if __name__ == '__main__':

# 2 :获取所有英雄目录

# 3 :单个英雄的所有皮肤图片URL、名字、编号

# 4 :下载函数

#该页面在下载好库后,在d盘下建立一个 王者荣耀壁纸 文件即可全部复制粘贴运用
页: [1]
查看完整版本: 王者荣耀壁纸爬取