爬虫案例之王者荣耀皮肤获取

1.需求:

通过输入英雄名称,采集该英雄所有皮肤的图片,并分类保存到本地。

2.设计思路:

  1. 获取英雄列表:首先,你需要获取王者荣耀官方网站上的英雄列表。这通常可以通过发送HTTP请求到官方网站的英雄列表页面来实现。

  2. 访问英雄皮肤页面:一旦你有了英雄列表,你可以遍历每个英雄的页面来获取皮肤信息。这通常涉及到发送HTTP请求到每个英雄的详细页面,并解析返回的HTML内容。

  3. 解析皮肤信息:使用Python的HTML解析库,如BeautifulSoup,你可以提取皮肤名称、图片链接等信息。

  4. 保存皮肤数据:最后,你可以将获取到的皮肤数据保存到本地文件中,例如文本文件或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.总结:

这段代码实现了通过输入特定英雄的中文名称,获取并下载该英雄所有皮肤图片的功能。代码首先从网络上请求英雄列表,然后根据输入的英雄名称查找到相应的信息,最终下载对应的皮肤图片并保存到本地指定的文件夹中

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值