lol英雄全皮肤爬取

2023-11-02

如何实现英雄联盟全皮肤?

作为英雄联盟资深老玩家,想必大家都希望自己能拥有一套全皮肤,那么今天,小编就带着大家用网络爬虫的方式,爬取一套属于自己的全皮肤,冲!
在这里插入图片描述

第一步:

首先,打开我们全皮肤所在的网站”https://101.qq.com/#/hero“
在这里插入图片描述

通过观察网页源代码,可以知道直接拿网页源代码是不行的,这个时候就需要通过接口去爬取,那现在我们找到皮肤所在的网络接口:

1.右键检查,找到Network,

2.点击一下网页左上方的刷新,就可以看到出现了很多json文件,

3.找到1.js那一栏,点击,

4.再点击1.js文件上方的Preview,就可以看到关于第一个英雄,安妮的所有信息,其中的mainImg那一栏就是皮肤所在的地址。
在这里插入图片描述

在我们知道地址过后,就可以开始敲代码了
在这里插入图片描述

第二步:安装并导入这次行动所需要的包,先爬取一个英雄的全皮肤。

"""
安装包:
pip install requests
pip install os
pip install re
"""
# 导入三方包
import requests
import os
import re
# 因为本次需要大概两个步骤,找到图片地址,保存下来,所以我们定义两个函数。

# 保存图片
def download_image(name, img_url: str):
    response = requests.get(img_url)
    # 打开文件夹lol,并把下载的图片保存在当前lol文件夹下
    with open(f'lol/{name}.{img_url.split(".")[-1]}', 'wb') as f:
        f.write(response.content)
        print('下载成功!')

# 查找地址
def get_one_hero_skin():
    url = 'https://game.gtimg.cn/images/lol/act/img/js/hero/1.js'
    response = requests.get(url)
    # 将接口文件转化为json文件
    result = response.json()
    # prinr(result) 查看文件,发现安妮的信息都保存在字典中,其中皮肤地址保存在‘skins’这个键值对里。
    # 对‘skins’进行遍历,查找需要的信息
    for skin in result['skins']:
        # 获取英雄名字
        name = skin['name']
        # 获取皮肤地址
        img_url = skin['mainImg']
        # 判断,是否为炫彩皮肤
        if not img_url:
            img_url = skin['chromaImg']
        # 使用下载函数,保存图片
        download_image(name, img_url)


if __name__ == '__main__':
    # 执行函数
    get_one_hero_skin()


这仅仅是一个英雄的全皮肤,还有那么多皮肤没有呢,那该怎么办呢?

第三步:添加循环,实现全英雄全皮肤爬取

# 更改第二步的查找地址代码,添加循环查找所有英雄的皮肤地址
def get_heroes_skin():
    # 众所周知,现在lol更新有160个英雄,且range循环为左闭右开区间,故取区间为(1,161)
    for page in range(1161):
        url = f'https://game.gtimg.cn/images/lol/act/img/js/hero/{page}.js'
        response = requests.get(url)  
        result = response.json()
        for skin in result['skins']:
            # 查找英雄名字,作为文件夹的命名
            hero_name = skin['heroName']
            # 调用创建文件夹函数,创建文件夹
            create_folder(hero_name)
            name = skin['name']
            img_url = skin['mainImg']
            if not img_url:
                img_url = skin['chromaImg']
            download_image(hero_name, name, img_url)
        print(f'{hero_name}下载成功!{page}')

# 添加一个创建文件夹函数,将每个英雄的皮肤放在当前英雄名字命名的文件夹下
def create_folder(hero_name):
    path = './lol/'  # 设置创建后文件夹存放的位置
    # 将文件夹命名为英雄名字
    isExists = os.path.exists(path + str(hero_name))
    if not isExists:  # 判断如果文件不存在,则创建
        os.makedirs(path + str(hero_name))
    else:
        # 当目录已存在时,跳过
        pass

本来我以为这就完了,可是苍天饶过谁?
在这里插入图片描述

想必大家都知道有款皮肤叫K/DA吧,这里的一个反斜杠,会在保存皮肤的时候,找不到文件,所以用一个替换函数,把/替换为.,就不会报错了。

                if '/' in name:
                    name = name.replace('/', '.')
                img_url = skin['mainImg']

第四步:查漏补缺

嘿嘿,如果大家觉得这就完了的话,还是太小看腾讯了,555。。。
在这里插入图片描述

在多次报错,多次修改过后,我终于找到了报错的原因,那就是皮肤所在的json地址,不是连续的,这是好大的一个坑,那我们就来把它解决了.

直接找到最后一个英雄,发现他的json地址为888,那我们就加一个判断,有我们就拿,沒有就跳过。

def get_heroes_skin():
    for page in range(1, 890):
        url = f'https://game.gtimg.cn/images/lol/act/img/js/hero/{page}.js'
        response = requests.get(url)
        # 把num定义为网页状态码
        num = re.findall('[(\d{3})]', str(response))
        list_1 = ['2', '0', '0']
        # 当状态码为200时,进行信息查找,不为200时,跳过进行下一循环。
        if num == list_1:
            result = response.json()
            # print('1')
            for skin in result['skins']:
                hero_name = skin['heroName']
                create_folder(hero_name)
                name = skin['name']
                if '/' in name:
                    name = name.replace('/', '.')
                img_url = skin['mainImg']
                if not img_url:
                    img_url = skin['chromaImg']
                download_image(hero_name, name, img_url)
            print(f'{hero_name}下载成功!{page}')
        else:
            # print('2')
            continue

总结:本次行动并不困难,小问题居多,如果细心一点,慢慢解决所有问题,相信大家都能做好,喜欢的朋友可以三连鼓励鼓励博主哦!!!

f’{hero_name}下载成功!{page}')
else:
# print(‘2’)
continue


总结:本次行动并不困难,小问题居多,如果细心一点,慢慢解决所有问题,相信大家都能做好,喜欢的朋友可以三连鼓励鼓励博主哦!!!


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

lol英雄全皮肤爬取 的相关文章

  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 使用其构造函数初始化 OrderedDict 以便保留初始数据的顺序的正确方法?

    初始化有序字典 OD 以使其保留初始数据的顺序的正确方法是什么 from collections import OrderedDict Obviously wrong because regular dict loses order d O
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • Netty02-入门

    二 Netty 入门 1 概述 1 1 Netty 是什么 Netty is an asynchronous event driven network application framework for rapid development
  • dlna 斐讯r1怎么用_斐讯R1智能(蓝牙)音箱固件升级教程

    斐讯R1智能 蓝牙 音箱固件升级教程 2019 07 05 17 46 00 55点赞 459收藏 112评论 儿子现在突然爱上听歌写作业 难得是听歌品味居然跟我8分像 书桌空间有限 看来一圈蓝牙音箱 发现斐讯遗产R1 哈曼认证单元 但据说
  • Python 频繁请求问题: [Errno 104] Connection reset by peer

    记遇到的一个问题 Errno 104 Connection reset by peer 今天工作上有个需求 数据库有个表有将近3万条url记录 每条记录都是一个图片 我需要请求他们拿到每个图片存到本地 一开始我是这么写的 伪代码 impor
  • Java学习笔记16——抽象类

    抽象类 抽象类 什么是抽象类 抽象的关键字 抽象类的特点 抽象类的成员特点 抽象类 什么是抽象类 在Java中 一个没有方法体的方法 应该被定义为抽象方法 而类中如果有抽象方法 该类被定义为抽象类 抽象的关键字 abstract 抽象类的特
  • Spring 的基本用法之另外一种装配方式

    一 目的 了解 Spring 环境配置 掌握定义应用程序类 掌握编辑配置文件创建 bean 实例实现依赖注入 掌握编辑测试类创建 IoC 容器 通过容器获取 bean 实例 二 内容 创建一个Spring项目 完成主题为 订单信息通知 项目
  • 一些比较不错的资源网站

    阮一峰日志地址 Github上值得推荐的开源电子书
  • QT 5.15 源码windows下 msvc编译

    目录 1 下载 Qt 源代码 2 安装依赖项 3 配置命令行环境变量 4 构建 5 使用 1 下载 Qt 源代码 Index of archive qt 5 15 5 15 8 singlehttps download qt io arch
  • STM32F4XX/APM32F4XX USB OTA升级

    近期在研究USB CDC协议 使用USB Virtual Port Com功能与上位机通讯做了OTA功能 开发平台 MDK529开发硬件 APM32F411首先介绍一下程序执行逻辑 程序由两部分组成 Boot APP Flash由三部分组成
  • 485串口服务器协议,10/100M TCP/IP转1口RS-232/485/422串口服务器 - 宇泰(UTEK) - 全球领先智能通讯解决方案提供商!...

    gt gt 硬件特性 菜单配置界面 操作模式丰富 满足不同行业的应用 提供Windows 虚拟COM 驱动软件 灵活合理的UNIX 下Fixedtty 工作机制 具有1个串行端口 可以连接终端 Modem 条码机 收款机 ISDN 终端适配
  • 《网页设计基础——CSS的四种引入方式详解》

    网页设计基础 CSS的四种引入方式详解 一 行内式 规则 1 行内式是所有样式方法中最为直接的一种 它直接对HTML的标记使用style属性 然后将CSS代码直接写在其中 格式 p style color FF0000 font size
  • 用「渣男」心态去面试,爽翻!

    转载自博学谷公众号 面试是一场 销售 自己的考试 很多程序员掌握的技术 知识都非常过关 但在面试中却不能完全展现出来 屡屡发挥失常 同样是天选打工人 别人的offer 像猴子摘苞谷 应接不暇 而你的offer 像肉包子打狗 有去无回 究其根
  • python的环境变量配置

    一般会自己在安装时配置环境变量 但是也有小失误忘了打勾勾 这时我们则需要自己配置环境变量 Python的环境变量配置很简单 1 1 Windows配置环境变量 右击点击 我的电脑 点击 属性 2在弹出的界面中点击 高级系统设置 不同的win
  • 《MySQL实战45讲》——学习笔记33 MySQL Server查询结果的发送流程 / 一次查询大量数据对innoDB bufferPool的影响 / 内存淘汰算法LRU与innoDB改进的LRU

    本篇通过 大查询会不会把内存用光 这个问题 介绍了MySQL 的查询结果发送给客户端的过程 涉及的知识点包括 MySQL Server查询结果的发送流程 边读边发 MySQL线程状态Sending to client Sending dat
  • 面试题:软件测试工程师工作职责?

    软件测试工程师工作职责 工作职责 测试人员有不同的级别 或者说有不同的职位称呼 都有相对应不同的工作职责 如果你想了解现在企业里面最新的职位需求的话 最简单的一个方式就是直接去大型招聘网站上BOSS直聘或者前程无忧 赶集网去搜索软件测试工程
  • 前端表单验证 for循环验证 自定义表单验证

  • 关于Java的那些安全框架

    前言 在Java开发中 安全是一项至关重要的特性 不仅仅是因为它保护我们的数据和系统免受恶意攻击 还因为它保护着我们和我们的用户的隐私 因此 Java安全框架的选择至关重要 在本篇博客中 我们将探讨一些常见的Java安全框架 以及如何使用它
  • 微服务发展趋势

    目录 云原生网关逐步成型 服务网格回归理性 微服务架构分层逐渐清晰 微服务技术标准逐步形成 数据面 SidecarProxy 与 Proxyless 模式的融合 服务治理数据面透明化 控制面标准化 分布式事务从多样化到标准化 多语言解决方案
  • Android混合开发全解析

    现在的app都开始流行混合开发了 这是一个app开发的新技术 作为android程序猿的我们也应该要了解并且掌握他 那么在使用之前 我们一定要搞清楚 我们的哪些场景使用混合开发好一些呢 这个问题一定要搞清楚 因为现在的混合开发还不成熟 We
  • 测开基础知识02

    1 软件测试 软件测试 软件测试是软件研发的一部分 不止是找出软件错误的活动 是软件开发每一环节中一些列质量活动的总称 包括软件研发过程的改进 软件质量评定 需要参与到每一环关键的决策 发现程序中的错误 根据需求 分析执行软件的全过程 保证
  • lol英雄全皮肤爬取

    如何实现英雄联盟全皮肤 作为英雄联盟资深老玩家 想必大家都希望自己能拥有一套全皮肤 那么今天 小编就带着大家用网络爬虫的方式 爬取一套属于自己的全皮肤 冲 第一步 首先 打开我们全皮肤所在的网站 https 101 qq com hero