前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >40行python代码搞定王者荣耀全部壁纸下载

40行python代码搞定王者荣耀全部壁纸下载

作者头像
可以叫我才哥
发布2022-06-06 10:23:54
4600
发布2022-06-06 10:23:54
举报
文章被收录于专栏:可以叫我才哥

大家好,我是才哥。

今天我们一起来采集王者荣耀英雄的全部皮肤地址,目标网址:

https://pvp.qq.com/web201605/herolist.shtml

通过开发者工具发现 https://pvp.qq.com/web201605/js/herolist.json接口返回了全部英雄数据。

代码语言:javascript
复制
import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
}
herolist = requests.get(
    "https://pvp.qq.com/web201605/js/herolist.json", headers=headers).json()
herolist
代码语言:javascript
复制
[{'ename': 105,
  'cname': '廉颇',
  'title': '正义爆轰',
  'new_type': 0,
  'hero_type': 3,
  'skin_name': '正义爆轰|地狱岩魂'},
 {'ename': 106,
  'cname': '小乔',
  'title': '恋之微风',
  'new_type': 0,
  'hero_type': 2,
  'skin_name': '恋之微风|万圣前夜|天鹅之梦|纯白花嫁|缤纷独角兽'},
......

但是针对第一个英雄廉颇点开详情页后,可以看到网址为https://pvp.qq.com/web201605/herodetail/105.shtml,从而可以知道页面随着ename变化。

我们发现实际并不只有这两个皮肤,勇者和特殊活动的皮肤并不直接在json接口里显示:

这意味着完整皮肤详情只能访问详情页查看,透过style属性可以看到图片地址,从而发现规律:

而完整的皮肤名称列表可以通过上述ul的data-imgname属性获取,最终完整代码如下:

代码语言:javascript
复制
import requests
import os
import re
from concurrent.futures import ThreadPoolExecutor


def download_img(eid, name, i, skin_name):
    filename = f"王者荣耀壁纸/{eid:0>3}-{name}-{i:0>2}-{skin_name}.jpg"
    print(filename)
    if os.path.exists(filename):
        return
    img_url = f"http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{eid}/{eid}-bigskin-{i}.jpg"
    res = requests.get(img_url)
    with open(filename, "wb") as f:
        f.write(res.content)


def download_hero_skin(hero):
    eid, name = hero["ename"], hero["cname"]
    res = requests.get(f"https://pvp.qq.com/web201605/herodetail/{eid}.shtml",
                       headers=headers)
    res.encoding = "gbk"
    skin_names = re.findall(
        '<ul[^>]+?data-imgname="([^"]+)"', res.text)[0].split("|")
    print(eid, name, skin_names)
    for i, skin_name in enumerate(skin_names, 1):
        end = skin_name.find("&")
        skin_name = skin_name[:len(skin_name) if end == -1 else end]
        download_img(eid, name, i, skin_name)


headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
}
herolist = requests.get(
    "https://pvp.qq.com/web201605/js/herolist.json", headers=headers).json()
os.makedirs("王者荣耀壁纸", exist_ok=True)
with ThreadPoolExecutor(max_workers=16) as executor:
    executor.map(download_hero_skin, herolist)

经过30秒左右已经下载完毕:

不到40行代码就实现了在30秒内下载完200多MB的王者荣耀壁纸。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 可以叫我才哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CLI 工具
云开发 CLI 工具(Cloudbase CLI Devtools,CCLID)是云开发官方指定的 CLI 工具,可以帮助开发者快速构建 Serverless 应用。CLI 工具提供能力包括文件储存的管理、云函数的部署、模板项目的创建、HTTP Service、静态网站托管等,您可以专注于编码,无需在平台中切换各类配置。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档