python爬取英雄联盟所有皮肤

import jsonpath
import requests
import json
import os
import time

# 程序开始时间
start = time.time()
from tqdm import tqdm
from time import sleep

# 如果有英雄联盟就存入没有就创建这个文件夹
yxlm_hero_skin_dir = 'D:/Python2020-邱勋涛/爬虫self/英雄联盟/'
if not os.path.exists(yxlm_hero_skin_dir):
    os.mkdir(yxlm_hero_skin_dir)

# hero_list.js文件
url1 = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js'
hero_text = requests.get(url1).text
# 转为 json 格式,且去掉hero成列表形式
hero_json = json.loads(hero_text)['hero']

# 横向皮肤的张数
x = 0
# 竖向皮肤的张数
q = 0
# 炫彩皮肤的张数
t = 0

for m in range(len(hero_json)):
    # 英雄id
    hero_id = hero_json[m]["heroId"]
    # 英雄名字
    hero_name = hero_json[m]['name']
    # print(hero_id)
    # print(hero_name)
    url2 = ("https://game.gtimg.cn/images/lol/act/img/js/hero/%s.js") % hero_id

    hero_text = requests.get(url2).text
    # 获取皮肤的js文件  从而获取他的皮肤id
    every_hero_js = json.loads(hero_text)["skins"]
    # print(len(every_hero_js))
    # print(every_hero_js)
    # 低奢的一种进度条显示的方法,就是利用tqdm库来实现
    for i in tqdm(range(len(every_hero_js))):

        heroName = every_hero_js[i]["name"]
        # 因为文件夹和图片命名不能带 /  ,K/DA系列 的皮肤需要进行判断,存在替换成空
        if "/" in heroName:
            heroName = heroName.replace("/", "")
        print(heroName)
        # 皮肤id
        skin_Id = every_hero_js[i]["skinId"]
        print(skin_Id)
        # 横向皮肤的url
        across_pic_url = every_hero_js[i]["mainImg"]
        # 如果url为空,跳过不下载
        if not across_pic_url:
            across_pic_url = None
        print(across_pic_url)

        # 竖向皮肤的url
        vertical_pic_url = every_hero_js[i]["loadingImg"]
        # 如果url为空,跳过不下载
        if not vertical_pic_url:
            vertical_pic_url = None
        print(vertical_pic_url)

        # 炫彩皮肤的url
        xuanchai_skin_url = every_hero_js[i]["chromaImg"]
        # 如果url为空,跳过不下载
        if not xuanchai_skin_url:
            xuanchai_skin_url = None
        print(xuanchai_skin_url)

        # 分类文件夹
        hero_skin_dir = yxlm_hero_skin_dir + hero_name + "/"
        if not os.path.exists(hero_skin_dir):
            os.mkdir(hero_skin_dir)

        # 如果url存在 则保存图片
        if across_pic_url:
            skin_a_picture = requests.get(across_pic_url).content
            with open(hero_skin_dir + heroName + '.jpg', 'wb') as f:
                f.write(skin_a_picture)
                x = x + 1
        # 如果url存在 则保存图片
        if vertical_pic_url:
            skin_v_picture = requests.get(vertical_pic_url).content
            with open(hero_skin_dir + heroName + '.png', 'wb') as f:
                f.write(skin_v_picture)
                q = q + 1
        # 如果url存在 则保存图片
        if xuanchai_skin_url:
            skin_c_picture = requests.get(xuanchai_skin_url).content
            with open(hero_skin_dir + heroName + '.png', 'wb') as f:
                f.write(skin_c_picture)
                t = t + 1
        # 计算皮肤总数量
        z = t + q + x

        # 程序结束时间
        end = time.time()

        # 计算执行时间
        over_time = end - start

        print("本次服务共下载%s张英雄联盟皮肤图片,一共耗时%s秒,欢迎下次光临" % (z, over_time))
# 邱勋涛撰写,未经允许,不得转载,否则坐牢吧
# 直接复制代码运行,需要修改代码中的俩路径,别这么懒
# 这里面注释很详细,认真看能看懂,不懂就问同学

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Qiuxuntao/article/details/117572470
今日推荐