获取英雄联盟全皮肤(极速版)

2023-10-31

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

话接上回,虽然我们能获得全皮肤,但是呢,速度确实是有点慢,但是没关系,这次小编就带着大家给爬虫提提速!!!
在这里插入图片描述

首先:

我们要明白怎么给爬虫加速?这就要提到多进程和多线程了!!
在这里插入图片描述

多进程:

# 1. 多进程
"""
一个应用程序默认有一个进程(主进程),一个进程中默认有一个线程(主线程)。
一个应用程序可以有多个进程,每个进程中也可以有多个线程。
同一个进程中的多个线程之间数据可以直接共享;不同进程中的数据无法直接共享
"""
# 2.多进程的使用
"""
一个程序默认只有一个进程,如果需要多个进程,需要程序员手动创建进程对象:
进程对象 = Process(target=函数, args=元组)
进程对象.start()
进程对象.join()
"""

多线程:

# 1.线程
"""
线程是进程执行任务的基本单元。
进程中的任务都是在线程中执行的(如果一个进程中没有线程,那么这个进程对应的程序什么事都做不了)
进程  -  车间(工厂),提供厂房以及厂房中保存资源
线程  -  车间工人
默认情况下,一个进程中有一个线程。
""

# 2.多线程  --一个进程中有多个线程
"""
单线程特点:一个线程执行多个任务,只能串行(一个一个按顺序)执行
多线程特点:多个线程执行多个任务,可以并行(同时进行)执行
"""
# 3.多线程的本质
"""
一个cpu同一时间只能处理一个线程,同一时间只有一个线程可以工作。
多线程原理:多线程技术其实就是利用cpu空闲时间做其他事情。
"""

线程池:

# 举例:
def download(name):
    print(f'======{name}开始下载:{datetime.now()}========')
    print(current_thread())
    time.sleep(randint(2, 7))
    print(f'======={name}下载结束:{datetime.now()}=================')

# 1)创建线程池对象
pool = ThreadPoolExecutor(5)

# 2)添加任务
# a.一次添加一个任务: 线程池对象.submit(函数,实参1,实参2,...)
pool.submit(download, '肖申克的救赎')
for x in range(10):
    pool.submit(download, f'电影{x}')

# b.一次添加多个任务: 线程池对象.map(函数, [数据1, 数据2, 数据3,...])
# 注意:这个地方任务对应的函数必须是有且只有一个参数的函数
pool.map(download, ['霸王别姬', '阿甘正传', '触不可及'])

# 注意:只要线程池没有关闭,我们可以在任何你需要位置添加任务。

# 3)关闭线程池(同时具备关闭线程池和等待线程池任务都完成的功能)
pool.shutdown()
# pool.submit(download, '电影10')         # 报错!
print('---------------------全部任务都完成!--------------------------')

那么,然后

运用线程池的方法,修改一下上次的代码,就能快速获取lol全皮肤了
在这里插入图片描述

import requests
import os
from queue import Queue
from concurrent.futures import ThreadPoolExecutor
from datetime import datetime


def down_load(hero_name, skin_name, skin_url):
    resp = requests.get(skin_url)
    file_type = os.path.splitext(skin_url)[-1]
    with open(f'./lol极速版/{hero_name}/{skin_name}{file_type}', 'wb') as f:
        f.write(resp.content)
        # print(f'下载{skin_name}完成')


# 1.获取所有英雄的id
def get_all_hero_id_list():
    Url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js?ts=2759918'
    resp = requests.get(url=Url)
    result = resp.json()
    all_hero_id = [x['heroId'] for x in result['hero']]
    # print(all_hero_id)
    return all_hero_id


# 使用线程池获取英雄皮肤所在链接:
def get_all_hero_messqge(hero_id):
    one_page = []
    resp = requests.get(f'https://game.gtimg.cn/images/lol/act/img/js/hero/{hero_id}.js')
    result = resp.json()
    # 获取英雄名称
    hero_name = result['hero']['name']
    # 创建英雄名对应的文件夹
    path = './lol极速版/'
    if not os.path.exists(path + str(hero_name)):
        os.makedirs(path + str(hero_name))
    # 解析所有皮肤数据
    for skin in result['skins']:
        one_url = []
        skin_name = skin['name'].replace('/', '-')
        skin_url = skin['mainImg']
        if not skin_url:
            skin_url = skin['chromaImg']
            one_url.append([hero_name, skin_name, skin_url])
            url_q.put(one_url)  # 一个的数据
            one_page.append(one_url)
    page_q.put(one_page)  # 一页的数据


if __name__ == '__main__':
    print(f'======开始下载:{datetime.now()}========')
    all_page = []
    # 2.使用线程池去获取所有英雄的详情json文件:
    # a.创建线程池
    # 获取下载链接的线程池
    # 创建id的队列:
    # .创建队列去获取英雄池中所产生的链接信息:
    url_q = Queue()
    page_q = Queue()
    url_pool = ThreadPoolExecutor(100)
    # 下载皮肤的线程池
    down_pool = ThreadPoolExecutor(100)

    hero_id = get_all_hero_id_list()

    # b.线程池中添加,寻找皮肤链接的任务,创建文件夹的任务,
    for id1 in hero_id:
        url_pool.submit(get_all_hero_messqge, id1)

    # 4.从队列中取出链接信息,然后在添加到下载的任务池中
    for x in range(len(hero_id)):  # 通过英雄个数控制外层循环
        for y in page_q.get():  # 通过每一个英雄有多少个皮肤控制内层循环
            name = url_q.get()[0]
            down_pool.submit(down_load, name[0], name[1], name[2])
    # 3)关闭线程池(同时具备关闭线程池和等待线程池任务都完成的功能)
    down_pool.shutdown()
    print(f'======下载结束:{datetime.now()}========')


```# 最后希望大家能给小编一点动力,比方说点点赞0.0

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

获取英雄联盟全皮肤(极速版) 的相关文章

  • 如何查看Databricks中的所有数据库和表

    我想列出 Azure Databricks 中每个数据库中的所有表 所以我希望输出看起来像这样 Database Table name Database1 Table 1 Database1 Table 2 Database1 Table
  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • Python pickle:腌制对象不等于源对象

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

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • Pandas:merge_asof() 对多行求和/不重复

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

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe

随机推荐

  • 安果相亲-找到心仪的另一半 一个安卓免费找对象软件推荐

    安果相亲 全国范围内的真实恋爱相亲平台 致力于帮助用户寻找真实恋爱 我们的实名认证机制确 保用户信息的真实性 汇集了高学历 经济稳定 丰富生活经验的优质单身男女 都在这里真诚地等待那个对的人 每个手机只能注册一个账户 为您提供一个更安全 更
  • ROS联合webots扩展(一)设定目标点进行导航

    设定目标点进行导航 注意 再学习本系列教程时 应该已经安装过ROS了并且需要有一些ROS的基本知识 此教程以webots demo为基础 ubuntu版本 20 04 webots版本 2021a ros版本 noetic 为了能和读者进一
  • 华为HCIE云计算之ebackup备份FC虚拟机

    华为HCIE云计算之ebackup备份FC虚拟机 一 登录ebackup 二 对接FC虚拟化平台 1 对接FC 2 查看FC上所有虚拟机 三 配置存储 1 创建存储单元 2 配置存储池 3 创建存储库 四 ebackup备份流程 1 配置受
  • C#类静态构造函数

    最近有做到面试题如下 class A private static int g n 1 static A g n public A g n public static int main A a1 new A A a2 new A conso
  • CSS 选择器的种类有哪些?怎么用?

    CSS 选择器的种类有哪些 怎么用 CSS 选择器的种类有标签选择器 类选择器 层级选择器 后代选择器 id选择器 组选择器 伪类选择器 作为程序员应该具备根据不同的场景选择适合的CSS选择器 CSS 选择器学习目标 熟悉掌握CSS 选择器
  • 追光的人 团队团队展示

    所属课程 软件工程1916 作业要求 团队作业第一次 团队展示 团队名称 追光的人 作业目标 让团队成员进行初步的认识和了解 互相熟悉 粗定项目类型 1 团队信息 团队名称 追光的人 团队人数 7 团队描述 一万次悲伤 依然会有dream
  • Chat GPT5如果问世会对世界产生什么影响?以及未来chat gpt 5会取代什么类型的工作。

    Chat GPT 5是一种基于人工智能技术的自然语言处理系统 可以自动回复和生成各种文本随着其技术的不断发展和改进 Chat GPT 5对未来世界将会产生以下几方面的影响 1 提升人类语言交流的效率和质量 Chat GPT 5可以高效地处理
  • Redis面试题 (2023最新版)

    文章目录 一 Redis为什么快 1 纯内存访问 2 单线程 避免上下文切换 3 渐进式ReHash 缓存时间戳 1 渐进式ReHash 2 缓存时间戳 二 Redis合适的应用场景 常用基本数据类型 5种 1 字符串 String 1 缓
  • CSS_文字渐变

    定义渐变背景样式 gradient text background image linear gradient to right ff0000 00ff00 渐变色范围 background clip text 应用渐变背景到文本 webk
  • VS2022 CMake报错解决小结

    目录 一 问题背景 二 问题分析 三 问题解决 一 问题背景 VS2022中能够跨平台的工程类型就是CMake项目 一套代码能跨windows Linux Mac多种操作系统 而实际使用时 发现相关资料比较少 需要摸索一下 碰到的问题简述
  • STM32 DMA+ADC连续采样产生的内部噪声和解决办法

    本文讨论的是内部采样频率过高而产生的噪声 DMA ADC连续采样 DMA发送完成产生中断后继续开启ADC转换 如下图中ADC Value数组中出现异常数据 DMA ADC 1ms 间隔采样 异常数据消失 电压12 22 电阻分压系数 4 0
  • javaMail SMTPSendFailedException: java邮件发送常见的异常类型

    421 HL REP 该IP发送行为异常 存在接收者大量不存在情况 被临时禁止连接 请检查是否有用户发送病毒或者垃圾邮件 并核对发送列表有效性 421 HL ICC 该IP同时并发连接数过大 超过了网易的限制 被临时禁止连接 请检查是否有用
  • 【Linux入门指北】第六篇 Linux常用的开发工具

    文章目录 前言 一 Linux编辑器 vi vim 1 vi vim介绍 2 vi vim 各种模式间的相互切换 3 一般模式 4 编辑模式 4 命令行模式 二 Linux软件包管理器 yum RPM 1 yum介绍 2 YUM本地源 系统
  • JavaEE-制作JSTL标签 详解

    使用定制标签库使得JSP程序更加简洁 可读性和可维护性大大的提高了 因此JSP定制标签的优势是非常明显的 它被认为是JSP所有特性中最被看好的特性 我们要编写一个标签 向请求者的浏览器输出 Hello World 同时该标签是一个没有体内容
  • 红队渗透靶场之W1R3S靶场(超详细!)

    W1R3S考察知识 nmap的基本使用 目录爆破工具的使用 CMS漏洞的利用 Linux用户的简单提权 W1R3S靶场搭建 W1R3S靶场下载地址 https download vulnhub com w1r3s w1r3s v1 0 1
  • 用Python做一个简单的视频播放器

    相关文件 关注小编 私信小编领取就好啦 开发工具 Python版本 3 7 8 相关模块 pyqt5模块 以及一些python自带的模块 搭建环境 安装Python并添加到环境变量 pip安装需要的相关模块即可 原理介绍 这里我们主要利用P
  • LLVM IR 即 LLVM Language Reference Manual 15 翻译: 001节

    Abstract This document is a reference manual for the LLVM assembly language LLVM is a Static Single Assignment SSA based
  • 实例六个,八段代码,详解Python中的for循环

    Python 支持循环 它的语法与其他语言 如 JavaScript 或 Java 有些不同 下面的代码块演示如何在 Python 中使用for循环来遍历列表中的元素 下面的这段代码可以通过行替换的行来指定打印的 你在打印的 将输出显示在同
  • html文本中加空格的四种方式

    一 使用 nbsp 这种是不换行空格 会一直累加到后面 缺点是会受到字体宽度的影响 很明显 两个 nbsp 邓等于一个中文宽度 二 使用 emsp 推荐使用这种方式 同样是不换行空格 可以一直累加的同时所占的宽度正好是一个汉字 而且受字体宽
  • 获取英雄联盟全皮肤(极速版)

    如何实现英雄联盟全皮肤 话接上回 虽然我们能获得全皮肤 但是呢 速度确实是有点慢 但是没关系 这次小编就带着大家给爬虫提提速 首先 我们要明白怎么给爬虫加速 这就要提到多进程和多线程了 多进程 1 多进程 一个应用程序默认有一个进程 主进程