123456acD 发表于 2020-9-1 00:06

python爬取lol英雄皮肤

import json
import os
import re
import random
import requests
from requests.exceptions import RequestException

# 本地保存地址
base_path = 'D:\\lol_hero_skin'
# 人机识别信息
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
                         'Chrome/80.0.3987.122 Safari/537.36'}


# 处理文件名,window系统下有些字符不允许出现\/:*?"<>| K\DA皮肤引起此问题
def handle_str(_str):
    temp = re.sub('[\\\/:*?"<>|]', '', _str)
    if len(temp) == 0:
      return ''.join(str(random.choice(range(10))) for _ in range(10))
    return temp


# 下载图片
def download_img(img_url, _base_path, name):
    r = requests.get(img_url, headers=headers, stream=True)
    print(name, r.status_code)# 返回状态码
    if r.status_code == 200:
      name = handle_str(name)
      open(_base_path + "\\" + name + '.jpg', 'wb').write(r.content)# 将内容写入图片
      print("done")
    del r


def load_hero_skin(heroId):
    hero_img_url_prefix = 'https://game.gtimg.cn/images/lol/act/img/js/hero/'
    hero_img_url_suffix = '.js'
    response = requests.get(hero_img_url_prefix + heroId + hero_img_url_suffix, headers=headers)
    html = json.loads(response.text)# 将网页内容以json返回
    skinsList = html.get('skins')# 皮肤列表
    heroName = html.get('hero').get('name')# 黑暗之女
    heroTitle = html.get('hero').get('title')# 安妮
    heroName = handle_str(heroName)
    heroTitle = handle_str(heroTitle)
    hero_skins_path = base_path + '\\' + heroName + ' ' + heroTitle
    if not os.path.exists(hero_skins_path):
      print('不存在,创建中。。。')
      os.makedirs(hero_skins_path, 755)
    for n in skinsList:
      skinName = n.get('name')
      _chromas = n.get('chromas')# 0:是基础、1:炫彩
      mainImg = n.get('mainImg')# 皮肤图片地址
      # print(skinName)
      # print(_chromas)
      # print(mainImg)
      if _chromas == '0':
            # 下载该图片
            download_img(mainImg, hero_skins_path, skinName)


# 获取全部英雄对象json
def get_hero_json():
    try:
      hero_list_url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js'
      response = requests.get(hero_list_url, headers=headers)
      html = json.loads(response.text)# 将网页内容以json返回
      print('版本:', html.get('version'))
      print('文件名:', html.get('fileName'))
      print('文件更新时间:', html.get('fileTime'))
      print('总英雄数量:', len(html.get('hero')))
      for i in html.get('hero'):
            heroId = i.get('heroId')
            load_hero_skin(heroId)
    except RequestException:
      return None


def main():
    get_hero_json()


# 当.py文件被直接运行时,当.py文件以模块形式被导入时,if __name__ == '__main__'之下的代码块不被运行。
if __name__ == '__main__':
    main()

佐佐木琲世 发表于 2020-9-2 09:53

我的城市没有海 发表于 2020-9-1 09:37
谁和你说的不封,我用skinlolpro都封好几次一天了,我朋友用换肤大师都封好几次。前几个星期cc换肤有人还 ...

封号的原因是因为软件开着被检测到,不是换肤被检测到,换成没有客户端的劫持注入就不会封号了,无论Call还是Hook,都是一直稳的

我的城市没有海 发表于 2020-9-4 17:20

佐佐木琲世 发表于 2020-9-3 17:35
以前我们宿舍三个人在用,从来没封过呀
之前用cc换肤的 我知道的就有十几个被封3年(应该是误封,一般都封几天) 后面很多人都被解封 所有换肤软件都有封号的可能 你没被封不代表不会封

haruego 发表于 2020-9-1 00:16

楼主能说一下这个是在什么网站爬取的吗?

能动者与受动者 发表于 2020-9-1 00:21

一脸懵逼地进来,又一脸懵逼地出去…

chhzll 发表于 2020-9-1 00:32

https://game.gtimg.cn/?

嫩皮猪 发表于 2020-9-1 01:55

现在改皮肤不封号了?

佐佐木琲世 发表于 2020-9-1 02:17

嫩皮猪 发表于 2020-9-1 01:55
现在改皮肤不封号了?

一直都不封啊

Cmilyci 发表于 2020-9-1 03:23

佐佐木琲世 发表于 2020-9-1 02:17
一直都不封啊

{:301_971:}   以前用LOLMODSKIN然后泛滥后有一天被封了就再也没用过了。

woyaoshangshiqi 发表于 2020-9-1 05:19

我一直用的LOL换肤盒子?

eastkyo 发表于 2020-9-1 06:34

正在学习爬虫,留着参考学习

CQLYES 发表于 2020-9-1 06:45

谢谢分享,等下试试
页: [1] 2 3 4 5
查看完整版本: python爬取lol英雄皮肤