查看: 1159|回复: 3

[经验分享] python爬取lol英雄皮肤

[复制链接]
发表于 2020-9-1 08:18 | 显示全部楼层 |阅读模式
非法程序、 2020-9-1 08:18 1159 3 显示全部楼层
  1. import json
  2. import os
  3. import re
  4. import random
  5. import requests
  6. from requests.exceptions import RequestException

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


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


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


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


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


  66. def main():
  67.     get_hero_json()


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


发表于 2020-9-1 11:39 | 显示全部楼层
lyfaicx 2020-9-1 11:39 显示全部楼层
好贴支持!
回复

使用道具 举报

发表于 2020-9-1 18:07 | 显示全部楼层
感谢楼主,好人一生平安
回复

使用道具 举报

发表于 2020-9-2 00:47 | 显示全部楼层
190700084 2020-9-2 00:47 显示全部楼层
这个是自wei代码嘛
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表 发新帖

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