1.需求:
通过输入英雄名称,采集该英雄所有皮肤的图片,并分类保存到本地。
2.设计思路:
-
获取英雄列表:首先,你需要获取王者荣耀官方网站上的英雄列表。这通常可以通过发送HTTP请求到官方网站的英雄列表页面来实现。
-
访问英雄皮肤页面:一旦你有了英雄列表,你可以遍历每个英雄的页面来获取皮肤信息。这通常涉及到发送HTTP请求到每个英雄的详细页面,并解析返回的HTML内容。
-
解析皮肤信息:使用Python的HTML解析库,如BeautifulSoup,你可以提取皮肤名称、图片链接等信息。
-
保存皮肤数据:最后,你可以将获取到的皮肤数据保存到本地文件中,例如文本文件或JSON文件。
3.总代码:
3.1 导包
import requests
from fake_useragent import UserAgent
import time
from bs4 import BeautifulSoup
from xpinyin import Pinyin
requests
:用于发送网络请求。fake_useragent
:生成随机的用户代理,以防止被网站反抓取。time
:用于暂停程序执行。BeautifulSoup
:用于解析HTML(在该代码中未使用到)。xpinyin
:用于将中文名转换为拼音(在该代码中未使用到)。
3.2 获取英雄列表
#%%
#请求英雄列表信息
url='https://pvp.qq.com/web201605/js/herolist.json'
#构建请求头
headers={'User-Agent':UserAgent().random}
#发送请求
resp=requests.get(url,headers=headers)
heroList=resp.json() # 将响应数据转换为json格式
print(heroList)
- 定义了一个请求URL,获取一个JSON格式的英雄列表。
- 构建请求头,使用随机生成的用户代理。
- 使用
requests.get
向服务器发送请求并获取响应。 - 将响应数据转换为JSON格式并打印之。
3.3 解析皮肤信息
def get_img_url(heroId,skin_name,heroName):
# 拼接皮肤图片的url地址
# print(heroId,skin_name.split('|'))
for i in range(len(skin_name.split('|'))):
img_url=f'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{heroId}/{heroId}-bigskin-{i+1}.jpg'
print(img_url)
# 下载图片
img_resp=requests.get(img_url,headers=headers)
if img_resp.status_code==200:
with open(f'{heroName}/{skin_name.split("|")[i]}.jpg','wb') as f:
f.write(img_resp.content) # 二进制写入文件
print(f'{skin_name.split("|")[i]}下载成功')
time.sleep(1)
- 定义了一个函数
get_img_url
,接收英雄ID、皮肤名称和英雄名称作为参数。 - 使用
skin_name.split('|')
分割皮肤名称,以获取每个皮肤的名称。 - 构建每个皮肤的图片URL并打印。
- 发送请求以下载该图片,如果状态码为200(表示成功),则将其保存到以英雄名称为文件夹名的文件夹下,命名为皮肤名称的JPEG文件,并打印成功消息。
- 使用
time.sleep(1)
暂停1秒以避免过快请求。
3.4 输入英雄中文名称并下载皮肤图片
#输入英雄中文名称
heroName="貂蝉"
#遍历英雄列表,找到对应的英雄id,英雄拼音名称,皮肤名称列表
for item in heroList:
if item['cname']==heroName:
heroId=item['ename'] # 英雄id
pinyin_name=item['id_name'] # 英雄拼音名称
skin_name=item['skin_name'] # 皮肤名称列表
print(heroId,pinyin_name,skin_name)
#创建文件夹
if not os.path.exists(heroName):
os.mkdir(heroName)
get_img_url(heroId,skin_name,heroName)
break
- 导入
os
库用于文件和目录操作。 - 设置
heroName
为需要下载的英雄名称(这里是 "貂蝉")。 - 遍历
heroList
,查找匹配的英雄名称。 - 一旦找到对应的英雄,提取其ID、拼音名称和皮肤名称列表,并打印这些信息。
- 检查本地是否存在以英雄名称创建的文件夹,如果不存在,则创建该文件夹。
- 调用
get_img_url
函数下载该英雄的皮肤图片。
4.总结:
这段代码实现了通过输入特定英雄的中文名称,获取并下载该英雄所有皮肤图片的功能。代码首先从网络上请求英雄列表,然后根据输入的英雄名称查找到相应的信息,最终下载对应的皮肤图片并保存到本地指定的文件夹中