爬取LOL全皮肤打造蒙太奇拼图

今年很有幸看到S8,LPL夺冠了,S3入坑的我,还默默的关注着今年这场比赛。一直被看好的RNG大意失荆州,而从不被看好的IG最终却能站在了决赛舞台上,最终拿到了冠军!人生也一样,对于我来说,写好每一行代码,不负今日才是人生最重要的事。

进入正题,今天就用python爬取LOL全皮肤,最后做个蒙太奇效果拼图致我大学青春

爬取LOL全皮肤打造蒙太奇拼图_第1张图片
寒冰射手

进入官网,通过查看web元素,可得知这张图的src是http://ossweb-img.qq.com/images/lol/web201310/skin/big22000.jpg。在这里图片的id是22000,22是英雄id,000表示第一张,以此类推。那么目的就很明确了,找到全英雄对应下皮肤ID。

在英雄列表界面,可发现通过http://lol.qq.com/biz/hero/champion.js,可以得到全英雄ID以及名称,如下图

爬取LOL全皮肤打造蒙太奇拼图_第2张图片
英雄列表

拿到英雄名称,则可以通过另外一个地址获取该英雄的所有皮肤详情,例如:http://lol.qq.com/biz/hero/Ashe.js

爬取LOL全皮肤打造蒙太奇拼图_第3张图片
英雄详情

至此完成了皮肤id和皮肤名称的获取。

下面是详细代码

import requests
import re
import json
import os
import time

headers = {'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:63.0) Gecko/20100101 Firefox/63.0'}

#获取源数据
def parse_url(url):
    response = requests.get(url, headers=headers)
    return response.content.decode()

#获取英雄联盟源数据
def get_js(url):
    data = parse_url(url)
    return data

def get_heros(data_js):
    #正则表达式,加括号是为了能够返回括号中的内容
    req = '"keys":(.*?),"data"'
    list_js = re.findall(req, data_js)[0]
    hero_json = json.loads(list_js)

    #key为英雄ID,value为英雄名称
    for key, value in hero_json.items():
        hero = value
        get_skin(hero)
        #延时,保证每次下载都存在延时,不会对服务器造成负担
        time.sleep(2)

def get_skin(hero):
    url = 'http://lol.qq.com/biz/hero/' + hero + '.js'
    data = get_js(url)

    req = '"id":"(\d.*?)","num"'
    list_js = re.findall(req, data)
    for i in list_js:
        url_image = 'http://ossweb-img.qq.com/images/lol/web201310/skin/big' + str(i) + '.jpg'
        skin_name = hero + '-' + str(i) + '.jpg'

        write_local(url_image,hero, skin_name)

def write_local(url_image, hero, skin_name):
    print(hero + '的' + url_image + '正在下载')
    skin = requests.get(url_image)
    folder_path = 'F:\\BiliBili\\LOL\\' + hero

    isCreated = os.path.exists(folder_path)
    if not isCreated:
        os.makedirs(folder_path)

    img_path = folder_path + '\\' + skin_name
    with open(img_path, 'wb') as f:
        f.write(skin.content)


def run():
    url = 'http://lol.qq.com/biz/hero/champion.js'
    data = get_js(url)
    heros = get_heros(data)

    print("下载完成")

run()

整个过程主要的点是一个正则表达式。

最后成功获取所有皮肤,包括原图,总共1048张图片

LOL全皮肤

对爬取的图片用AndreaMosaic进行拼图操作

爬取LOL全皮肤打造蒙太奇拼图_第4张图片
拼图
最终完成图

细节图

找到自己的曾经的熟悉的英雄么?

你可能感兴趣的:(爬取LOL全皮肤打造蒙太奇拼图)