吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3444|回复: 22
收起左侧

[Python 转载] 利用Python协程来爬取LOL所有英雄的皮肤高清图片

  [复制链接]
Rezalt 发表于 2020-12-7 15:48
最近有一朋友要LOL的数据进行数据分析,叫我帮他抓一下数据。突发奇想,顺便把英雄的所有皮肤下载到本地好了。
PS: 安装了LOL的伙伴图片直接在LOL文件夹里面,可以百度寻找。此贴仅分享下技术思路以及没下载的小伙伴获取图片的方式


开始正文:
先到LOL官网去找到英雄资料一栏: [fly]https://lol.qq.com/data/info-heros.shtml[/fly]
通过页面加载可以得知数据是异步加载出来的,直接分析看一下是哪个链接请求的即可。
至此!我们已经获得了所有的英雄列表了。第一步完成!
12.png
进入英雄首页进行分析看看!
通过页面加载可以得知,图片也是通过异步加载出来的,和上面一样,直接去分析看下是哪个链接即可。
13.png
分析到此处所有流程分析完毕,接下来就是抓取了,代码如下(程序未做网络异常处理,网络状态好是可以一直跑下去的):
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 15.png

免费评分

参与人数 6吾爱币 +9 热心值 +3 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
8612089 + 1 我很赞同!
天上下饭神 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
JIAN_ + 1 + 1 鼓励转贴优秀软件安全工具和文档!
老友记joey + 1 我很赞同!
isugar + 1 厉害呀

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Rezalt 发表于 2020-12-8 09:02
daowuya 发表于 2020-12-7 23:57
楼主,你好 想请教一下  通过页面加载可以得知数据是异步加载出来的  这个是依据什么得出的呢  可以详细解 ...

因为网页已经加载出来了, 下面的英雄列表是后面慢慢展示出来的,如果不是异步应该是一起出来的才对
 楼主| Rezalt 发表于 2020-12-9 16:10
daowuya 发表于 2020-12-9 13:49
楼主你好  运行只爬取了这一张就结束了  不知道什么问题 有空可以解答一下吗  谢谢辣

对比下代码和我的有没有差别  我看了下程序是正常的
w92vv 发表于 2020-12-7 16:56
EliteQQ 发表于 2020-12-7 17:06
进来看看先。
蓝风徐来 发表于 2020-12-7 17:11
你的网址怎么会动
 楼主| Rezalt 发表于 2020-12-7 17:14
w92vv 发表于 2020-12-7 16:56
那个移动的网址是咋弄

发帖的时候链接有个选项
 楼主| Rezalt 发表于 2020-12-7 17:15

发帖的时候链接有选项 选择就好了
行走悟人生 发表于 2020-12-7 17:47
有点好奇分析什么数据
iYoloPPD 发表于 2020-12-7 19:08
料事如神,果然会跑不通
QQ图片20201207190659.png
yzqhj 发表于 2020-12-7 19:56
楼主,为什么我浏览器,浏览时是\u的这种编码
yzqhj 发表于 2020-12-7 19:59
还有彼岸网的爬出来的还是1mb不到高清,爬去不到真的4k原图!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 16:32

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表