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

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

首先:

我们要明白怎么给爬虫加速?这就要提到多进程和多线程了!!

多进程:

# 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 datetimedef 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

获取英雄联盟全皮肤(极速版)相关推荐

  1. javaJsoup爬取LOL英雄联盟全皮肤

    javaJsoup爬取LOL英雄联盟全皮肤 配置maven <dependency><groupId>org.jsoup</groupId><artifact ...

  2. 用Python获取英雄联盟所有皮肤图片

    先来看一张图片. image.png 先讲解下思路,然后直接放源码,想要获取源码的同学直接拉到最下面就好. 1.爬虫第一步 首先要分析网页的DOM结构,就是英雄联盟官网,然后在下面找到英雄资料.然后在 ...

  3. 简易爬虫--50行代码获取英雄联盟全英雄皮肤

    50行代码搞定英雄联盟LOL全英雄皮肤下载 # 下载英雄联盟全英雄皮肤 import os import requestsdef downloadPic(heroIds, titles, names, ...

  4. Python获取英雄联盟的皮肤原画:新手玩家们都懵了!(一)

    本爬虫是为了经验交流,如果读者需要转载,请注明出处和链接 希望:喜欢博主的读者,可以点个关注~,更多精彩内容请收藏本栏目,不定期添加干货. 代码:如果你订阅了本专栏可以直接私信我,我可以发给你完整的代 ...

  5. Python爬取英雄联盟全皮肤

    Python爬取英雄联盟皮肤 打开英雄联盟官网:https://lol.qq.com,点击游戏资料,按F12进入开发者模式.刷新,找到hero_list.js,里面有我们需要的网址以及其他信息. 代码 ...

  6. 爬虫基础(案例:爬取英雄联盟全皮肤)

    爬取思路: 1.首先分析是静态数据还是动态数据,HTML源码中找不到英雄页面的信息,所以是静态数据. 2.chrom调试抓包,找到皮肤信息所在的URL ,这里第一个英雄皮肤所在的URL为https:/ ...

  7. iOS卡片式立体轮播仿英雄联盟选择皮肤效果展示

    第二次更新:更加丰富的相册图片展示 1.由于不在继承与FlowLayout,只是单纯继承与UIColletionLayout 2.关键方法 layoutAttributesForItemAtIndex ...

  8. python爬虫脚本 初级入门爬虫英雄联盟所有皮肤_Python爬虫练习:20行Python代码爬取王者荣耀全英雄皮肤...

    引言王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了.我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成. 准备工作 ...

  9. python3爬虫之多线程爬取英雄联盟所有皮肤图片

    python3爬虫之多线程爬取英雄联盟所有皮肤图片 线程不要太高,容易出错,大约用时1分钟左右. import requests import json import os import thread ...

  10. 安卓手机tiktok怎么下载_英雄联盟手游安卓版怎么下载 安卓外服下载方法教程...

    英雄联盟手游安卓版怎么下载?一直在等LOL手游的小伙伴们可以喜大普奔了,海外地区已经可以开玩了,不过一些萌新还不清楚英雄联盟手游安卓怎么玩,毕竟国服还不知道要等到什么时候,那么接下来小编就为大家分享一 ...

最新文章

  1. chrome动态ip python_简单python代码实现模拟浏览器操作
  2. keras 张量切片
  3. Arduino/Microduino与OneNet平台及web服务器端的交互
  4. hibernate的lazy的使用
  5. easyui数据表格显示复选框_【Excel技巧】使用控件一键切换实现单位元和万元随意显示...
  6. SAP License:Payment Terms 付款条件
  7. VI 编辑器保存命令
  8. 几种java反编译软件的安装以及使用总结
  9. Vivado 2019使用教程
  10. ITU-R BT601/BT709 BT656/BT1120区别与联系
  11. 【免费办公软件】万彩办公大师教程丨二维码生成器
  12. 使用 Beyond Compare 和版本控制系统
  13. AOSP 隐藏 su
  14. python摄氏度转华氏度_如何用 python编写华氏摄氏度的相互转换?
  15. Zblog采集-Zblog自动采集-Zblog免登录发布插件
  16. 如何防范动态调试(Anti-Debug)(SoftICE篇)
  17. Android 没有出现menu 按键显示 解决
  18. Twitter是什么软件?哪个国家的?怎么使用?免费吗?
  19. 行测技巧:十字交叉法解决比值混合问题
  20. Flurry analytics SDK集成步骤及功能简介

热门文章

  1. Specification同时实现模糊查询、排序、分页
  2. MySQL的一级索引和二级索引介绍
  3. 为什么ios比android流畅
  4. 【STM32】OOK软解码
  5. hackthebox - frolic (考点: 信息搜集 ook解密 base解密 zip 解密 xxd解密 brainfuck解密 playsms安全)
  6. 解决MySQL登录ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor)问题
  7. python替换ppt文本_Python操作PPT实现自动查找替换
  8. 计算机画大熊猫教案,大班美术画大熊猫教案
  9. lzg_ad:XPE网络功能组件
  10. 网易首支AI歌曲《醒来》发布:声音太逼真 能瞒过人类