爬取王者荣耀所有英雄所有皮肤

思路分析:

  1. 寻找所爬内容的url,并查看headers信息决定爬虫方式get还是post
  2. 访问单个英雄所有皮肤,获取相关参数
  3. 修改相关参数,循环遍历所有英雄皮肤并保存

源码:

复制代码注意修改图片下载地址

import requests
import os
from time import sleep
from lxml import etree  # 解析html的库

# 1、寻找url
headers = {'Users-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)\
 AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.42'}  # 伪装成浏览器

# 2、访问单个英雄所有皮肤获取ename、cname
hero_list_url = 'https://pvp.qq.com/web201605/js/herolist.json'
hero_list_resp = requests.get(hero_list_url, headers=headers)

# 3、循环遍历所有英雄皮肤并保存
for h in hero_list_resp.json():
    ename = h.get('ename')  # get:返回字典关键字key对应的值value
    cname = h.get('cname')
    # 创建以英雄名为名字的文件夹
    if not os.path.exists(f'E:/code_python/王者荣耀/{cname}'):
        os.makedirs(f'E:/code_python/王者荣耀/{cname}')
    # 访问单个英雄主页
    hero_info_url = f'https://pvp.qq.com/web201605/herodetail/{ename}.shtml'
    hero_info_resp = requests.get(hero_info_url, headers=headers)
    hero_info_resp.encoding = 'gbk'
    # 获取皮肤名
    e = etree.HTML(hero_info_resp.text)
    names = e.xpath('//ul[@class="pic-pf-list pic-pf-list3"]/@data-imgname')[0]
    names = [name[0:name.index('&')] for name in names.split('|')]
    for i, n in enumerate(names):  # 皮肤下载
        resp = requests.get(f'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{ename}/{ename}'
                            f'-bigskin-{i + 1}.jpg', headers=headers)
        with open(f'E:/code_python/王者荣耀/{cname}/{n}.jpg', 'wb') as f:
            f.write(resp.content)
        print(f"已下载{n}的皮肤")
        sleep(2)  # 模拟人为下载防止服务器反爬

本文章使用limfx的vscode插件快速发布