python爬取英雄联盟所有皮肤价格表_利用Python协程来爬取LOL所有英雄的皮肤高清图片...

news/2024/10/18 0:26:37/

最近有一朋友要LOL的数据进行数据分析,叫我帮他抓一下数据。突发奇想,顺便把英雄的所有皮肤下载到本地好了。

PS: 安装了LOL的伙伴图片直接在LOL文件夹里面,可以百度寻找。此贴仅分享下技术思路以及没下载的小伙伴获取图片的方式。

开始正文:

先到LOL官网去找到英雄资料一栏:https://lol.qq.com/data/info-heros.shtml

通过页面加载可以得知数据是异步加载出来的,直接分析看一下是哪个链接请求的即可。

至此!我们已经获得了所有的英雄列表了。第一步完成!

12.png (619.04 KB, 下载次数: 0)

2020-12-7 14:54 上传

进入英雄首页进行分析看看!

通过页面加载可以得知,图片也是通过异步加载出来的,和上面一样,直接去分析看下是哪个链接即可。

13.png (775.43 KB, 下载次数: 0)

2020-12-7 14:59 上传

分析到此处所有流程分析完毕,接下来就是抓取了,代码如下(程序未做网络异常处理,网络状态好是可以一直跑下去的):

PS:第一次发帖,可能代码格式会有点问题,代码跑不了私我直接发文件源码。

[Python] 纯文本查看 复制代码#!/usr/bin/python3

# -*- coding:utf-8 -*-

"""

@file: lol.py

@time: 2020/12/7 15:02

@author: Rezalt

@desc: 下载lol各个英雄高清皮肤图片

"""

from gevent import monkey

monkey.patch_all()

import gevent

import requests

import os

class DownloadPic:

def __init__(self):

self.headers = {

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) '

'Chrome/87.0.4280.66 Safari/537.36'

}

def get_info(self):

"""

获取所有英雄的信息

:return:

"""

url = "https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js"

# 在当前目录下新建文件夹来存图片

if not os.path.exists(os.getcwd() + '\\LOL'):

os.mkdir(os.getcwd() + '\\LOL')

response = requests.get(url=url, headers=self.headers)

# print(response.json())

for hero in response.json()['hero']:

hero_id = hero['heroId']

hero_name = hero['name']

heropic_url = f'https://game.gtimg.cn/images/lol/act/img/js/hero/{hero_id}.js'

pic_infos = requests.get(url=heropic_url, headers=self.headers)

task_list = []

# 使用协程来进行图片下载,这里使用10个协程(想开多少开多少,资源够就行)

for info in pic_infos.json()['skins']:

# 这里名字皮肤名字处理一下,后续存图片以名字命名的

pic_name = ''.join(info['name'].split(info["heroTitle"])).strip()

pic_url = info['mainImg']

# 有一些皮肤是带炫彩皮肤的,炫彩皮肤没有壁纸,这边直接过滤掉

if not pic_url:

continue

task_list.append(gevent.spawn(self.downloads, hero_name, pic_name, pic_url))

if len(task_list) == 10:

gevent.joinall(task_list)

task_list = []

if task_list:

gevent.joinall(task_list)

def downloads(self, hero_name: str, pic_name: str, pic_url: str):

"""

下载英雄皮肤图片

:return:

"""

# 创建英雄文件夹来存储该英雄的皮肤图片

if not os.path.exists(os.getcwd() + f'\\LOL\\{hero_name}'):

os.mkdir(os.getcwd() + f'\\LOL\\{hero_name}')

# 由于存图片会存在一些字符是不能放在文件名字当中的,这边对pic_name进行简单处理

error_msg = ['\\', '/', ':', '*', '?', '"', '', '|']

error_words = [word for word in error_msg if word in pic_name]

for word in error_words:

pic_name = pic_name.replace(word, '')

with open(os.getcwd() + f'\\LOL\\{hero_name}\\{pic_name}.png', 'wb') as f:

result = requests.get(url=pic_url, headers=self.headers)

f.write(result.content)

print(f'{hero_name}: {pic_name} 下载完成!')

def main(self):

"""

主函数

:return:

"""

self.get_info()

if __name__ == '__main__':

dp = DownloadPic()

dp.main()

附上程序结果:(高清图片还是香的)

14.png (284.53 KB, 下载次数: 0)

2020-12-7 15:47 上传

15.png (151.79 KB, 下载次数: 0)

2020-12-7 15:47 上传


http://www.ppmy.cn/news/665509.html

相关文章

python爬取英雄联盟所有皮肤价格表_用Python爬取英雄联盟(lol)全部皮肤

小三:“怎么了小二?一副无精打采的样子!” 小二:“唉!别提了,还不是最近又接触了一个叫英雄联盟的游戏,游戏中很多皮肤都需要花钱买,但是我钱不够呀...” 小三:“咋得&am…

Laravel 多字段去重count计数

Laravel 多字段去重count计数 背景:需要统计数据列表总条数(字段1、字段2去重统计) table:policy_view,去重字段admin_id和permission 期望结果:count不含重复统计数据 解决思路: 语法:DISTI…

node事件机制详解

事件轮询机制 事件执行顺序: 引入一下两个概念: 宏任务(Macrotasks):就是参与了浏览器事件循环的异步任务 宏任务有:setTimeout,setInterval微任务(Microtasks): 直接…

氧os 下载地址

一加 国内版本 氧os 下载地址 系统下载和更新

亲测:一加手机3刷机OxygenOS详细教程

简介: OxygenOS是OnePlus3提供给国际市场的OS,内置了原生的Google Android applications. 而国内购买的OnePlus3自带的为H2OS,内置国内替代apps. 实际测试后发现从用户体验到界面的美观,再到省电等功能上,OxygenOS…

php自带的apche,OS的自带Apache+php配置

OS自带APache和php Apache:打开终端 重启apache:sudo /usr/sbin/apachectl restart 关闭apache:sudo /usr/sbin/apachectl stop 开启apache:sudo /usr/sbin/apachectl start 输入密码即可操作。 ————————————————…

OS进程同步与通信

信号量机制 信号量用于互斥 P(S) 临界区 V(S) ----- P(S) 临界区 V(S)生产者消费者: typedef int semaphore //信号量值设置为1就是互斥量 semaphore mutex 1; //同一时刻只有一个进程可以读写缓冲区 semaphore empty N; //“空”的数…

python标准库os的方法listdir_Python 标准库 os 中用来列出指定文件夹中的文件和子文件夹列表的方法是listdir()。_ERP省赛理论题训练答案_学小易找答案...

【单选题】油液的动力粘度的单位是( )。 【单选题】恩氏粘度.赛氏粘度和雷氏粘度属于( )。 【单选题】下面的( )又称为相对粘度。 【填空题】填写下述包装指示标志的含义: 【简答题】简述革兰氏染色机理。 【简答题】流通加工有哪些类型? 【判断题】过户是指对已经存入仓库的货…