百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

公司新来的实习生,用Python写了英雄联盟全皮肤爬取源码

off999 2024-09-21 20:53 38 浏览 0 评论

起因

最近公司入职许多实习生,都配备了笔记本电脑,上周五我路过的时候看到有个男实习生在浏览英雄联盟网站,我以为他在工作时间看游戏攻略,所以我找来了他得组长说了这个情况。

他组长告诉我,他是一个英雄联盟游戏迷,喜欢用英雄皮肤作为桌面背景,当时正在找好看的皮肤作为桌面背景。

下班前,我找到了他,跟他聊了一下我带团队的方式,因为多年前的我也是英雄联盟玩家,所以我不排斥员工玩游戏,只要你工作完成得好,你上班玩游戏都可以,只要不被人事或者监管部门的人发现,你随便。

我还是非常乐意维护兄弟们的,前提就是需要你的时候,你能够顶上去,而不会因为你而导致项目进度延期。

在跟他沟通的过程中,发现他在学习有学习过Python,写过一些爬虫,因此,我就给他布置了一个任务。

让他用Python实现英雄联盟官网的全皮肤爬取,他当时还是很懵的,说可以试试。

给他布置这个任务的目的,一是算作一个小惩罚,另外一个也可以变相地了解一下他的编码能力,逻辑思维能力。

今天中午他兴奋地找到我,说他已经完成了,我让他把源码发到我的邮箱,我刚才在我本地运行了一次。下面是他的效果图。

我花了一点时间,看了一下代码,发现他没有对每个英雄的皮肤进行分类,并且是单线程执行的,所以我就对源码给稍加改动,Python代码如下

 url = 'https://game.gtimg.cn/images/lol/act/img/js/hero/{}.js'.format(hero_id)
 dir_name = 'skins/{}'.format(hero_name)

我将每个英雄在skins文件夹下新建一个英雄的文件夹,然后将每个英雄的所有皮肤放在了对应的文件夹中。

使用多线程的方式去下载皮肤,Python源代码如下;

async def run():
    semaphore = asyncio.Semaphore(30)
    heroes = hero_list()
    tasks = []
    for hero in heroes:
        tasks.append(asyncio.ensure_future(skins_downloader(semaphore, hero['heroId'], hero['title'])))
    await asyncio.wait(tasks)

改版后的效果图

Python运行图

所有代码

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


import requests
import asyncio
import os
from aiohttp import ClientSession
import aiohttp
import json
from datetime import datetime


async def skins_downloader(semaphore, hero_id, hero_name):
    async with semaphore:
        url = 'https://game.gtimg.cn/images/lol/act/img/js/hero/{}.js'.format(hero_id)
        dir_name = 'skins/{}'.format(hero_name)
        if not os.path.exists(dir_name):
            os.mkdir(dir_name)
        async with ClientSession(connector=aiohttp.TCPConnector(ssl=False)) as session:
            async with session.get(url) as response:
                response = await response.read()
                for skin in json.loads(response)['skins']:
                    if skin['mainImg']:
                        img_url = skin['mainImg']
                        path = os.path.join(dir_name, '{}.jpg'.format(skin['name'].replace('/', ''), ))
                        async with session.get(img_url) as skin_response:
                            with open(path, 'wb') as f:
                                print('\rDownloading [{:^10}] {:<20}'.format(hero_name, skin['name']), end='')
                                f.write(await skin_response.read())


def hero_list():
    return requests.get('https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js').json()['hero']


async def run():
    semaphore = asyncio.Semaphore(30)
    heroes = hero_list()
    tasks = []
    for hero in heroes:
        tasks.append(asyncio.ensure_future(skins_downloader(semaphore, hero['heroId'], hero['title'])))
    await asyncio.wait(tasks)


if __name__ == '__main__':
    start_time = datetime.now()
    loop = asyncio.get_event_loop()
    loop.run_until_complete(run())
    loop.close()
    end_time = datetime.now()
    time_diff = (end_time - start_time).seconds
    print('\nTime cost: {}s'.format(time_diff))

总结

通过这件事情之后,我不知道会不会对这个实习生产生什么深刻的影响,我只知道,用自己的技术,来实现自己喜欢的事情是一件非常有成就感的事情。

而我,也了解到了这个实习生的Python能力,无论他的代码是否是自己独立完成的还是借助别人完成的。

这不重要,重要的是他能够执行好这个任务,这一点,在工作中非常重要。

相关推荐

怎么查看电脑产品密钥(怎么查看自己电脑产品密钥)

准备工具:电脑1.打开电脑,在电脑中找到我的电脑选项,双击该选项打开我的电脑进入我的电脑主页面。2.在我的电脑主页面中找到磁盘下方的空白位置,鼠标右键单击该位置调出功能选项框。3.在功能选项框中找到下...

不知道密码怎么连接wifi网络

不知道WiFi密码怎么连接,如果你不知道WiFi密码的话,那我没有办法连接网络,你必须去找WiFi密码是主人,然后询问密码,只有你得到了最准确的密码以后,你才可以开启你的WiFi网络设置,然后输入正确...

u盘写了保护怎么把保护删掉了

U盘写保护可以通过以下几种方法去除:1.取消U盘的写保护开关。有些U盘上面自带写保护的开关,如果被拨到写保护状态时,就会对U盘进行写保护,这种情况解决的办法最简单,直接将开关拨回原位即可。2.修复...

深度ghost精简xp(深度ghost文件)

windowsxp下运行ghost方法如下:1、首先把GHOST.EXE程序复制到你的硬盘某区上(不要是C区,假如是E区)。2、然后重新启动电脑,重启过程中按DEL键进入BIOS设置,设置为从光驱启...

固态硬盘如何安装(固态硬盘如何安装系统)

1、首先要在在机箱内找到固态硬盘安装的电源连接线,是从电脑的电源引出的一根线。形状是扁嘴形上面一般印着一个白色的“P4”2、然后要在主板上找固态硬盘的数据接口,用于数据输入输出,俗称SATA接口,再找...

windows怎么打开注册表(windows怎么打开注册表管理器)

方法一、直接打开注册表1、点击屏幕左下角的“开始”按钮,再点击“运行”;2、或者直接按Win键+R键,打开“运行”对话框;3、在“运行”输入框中输入“regedit”命令;4、这样就能够打开注册表编辑...

windows7安装windows10(windows7安装光盘下载)

在安装Win7时,出现提示“Windows无法安装到这个磁盘。这台计算机的硬件可能不支持启动到此磁盘。请确保在计算机的bios菜单中启用了磁盘的控制器。” 解决方法: 1.如果之前你做过BIOS设置,...

装机配置模拟器(装机配置模拟器教程)
装机配置模拟器(装机配置模拟器教程)

装机模拟器2好装机模拟器2装系统方法1.在游戏PC装机模拟器里,有时候我们修理好电脑之后,发现电脑没有安装操作系统,这时候应该先安装系统。2.第一步,点击PC装机模拟器游戏,登录游戏。3.第二步,进入游戏之后,找到需要没有安装操作系统的电脑...

2025-11-10 21:51 off999

电脑网络正常但是上不了网(网络正常但电脑无法上网)

分析如下1、首先检查网卡的问题,打开电脑后,打开电脑右下角的WiFi连接,然后从里面的网络和共享中心检查,打开网络和共享中心后,出现对话框,在对话框左侧上方找到更改适配器设置,单击左键打开,就可以发现...

vs2008安装包下载(vs2008下载官方下载)

vs2008是面向WindowsVista、Office2007、Web2.0的下一代开发工具,VS2008引入了250多个新特性,整合了对象、关系型数据、XML的访问方式,语言更加简洁。使用V...

怎么换系统win7(怎么换系统盘固态硬盘)
  • 怎么换系统win7(怎么换系统盘固态硬盘)
  • 怎么换系统win7(怎么换系统盘固态硬盘)
  • 怎么换系统win7(怎么换系统盘固态硬盘)
  • 怎么换系统win7(怎么换系统盘固态硬盘)
cad2018序列号(cad2018序列码)

AutoCAD2018序列号和密钥:序列号:356-72378422,666-69696969,667-98989898,400-45454545,066-66666666等密钥:001J1CA...

恢复出厂设置win7(恢复出厂设置win11)
  • 恢复出厂设置win7(恢复出厂设置win11)
  • 恢复出厂设置win7(恢复出厂设置win11)
  • 恢复出厂设置win7(恢复出厂设置win11)
  • 恢复出厂设置win7(恢复出厂设置win11)
ip检测网站(ip地址测试)

IP检测工具(IPNetChecker)V1.5.2是一个简易实用,功能强大的网络监控软件,使您可以检查互联网和局域网上的IP主机的网络状态。IP检测工具(IPNetChecker)V1.5....

云电脑app哪个好(手机云电脑app哪个最好)

答:以下是一些比较好的云电脑应用程序推荐:1.AnyDesk-支持Windows、MacOS、Linux、Android和iOS,可用于远程访问和控制PC或移动设备。2.Splashtop...

取消回复欢迎 发表评论: