忘忧蝶 发表于 2021-9-2 13:05:06

⚡王者农药皮肤图片获取!⚡

   ⚡王者农药皮肤图片获取!⚡



[*]一、媒介
[*]二、环境准备
[*]三、具体实现
[*]

[*]1、所有英雄信息获取
[*]2、分析图片url
[*]3、具体实现
[*]4、结果

[*]四、最后

一、媒介

  王者荣耀各人都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤!
二、环境准备

编辑器:pycharm

用到的库:requests、lxml
三、具体实现

1、所有英雄信息获取

  打开官网,进入英雄资料页面,通过开发者工具,得到所有的英雄的数据
https://img-blog.csdnimg.cn/402d3779756b48a596ff73bb2d2fe6e2.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP6JGj5ZCM5a2m5ZWK,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center
  每一个英雄资料为json格式,共106个,其中一个表现如下:
https://img-blog.csdnimg.cn/5ba316e7165c481683a1bbd2ec278c54.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5bCP6JGj5ZCM5a2m5ZWK,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center
  解码后,名称如下:
{
        'cname': '廉颇', # 英雄名称
       'ename': 105, # 英雄编号
       'hero_type': 3, # 英雄类型
       'new_type': 0,
       'skin_name': '正义爆轰|地狱岩魂', # 英雄皮肤名称
       'title': '正义爆轰' # 当前皮肤
}   这里主要需要的是 cname、ename、skin_name,skin_name用于获取皮个数
2、分析图片url

  打开一个英雄的详情页,打开开发者工具,以为云樱为例,一共两个皮肤,分别在两个li标签中,因此循环两次就可以全部拿到,也就是为什么之前要获取skin_name的原因

  观察url,寻找规律,其中前面的【//game.gtimg.cn/images/yxzj/img201606/skin/hero-info/】都是固定的,后面的是每个英雄的ename,然后ename-bigskin-skin_name的长度,因此,只要对这个url进行请求就可以得到高清壁纸
//game.gtimg.cn/images/yxzj/img201606/skin/hero-info/538/538-bigskin-1.jpg

//game.gtimg.cn/images/yxzj/img201606/skin/hero-info/538/538-bigskin-2.jpg 3、具体实现

from pprint import pprint
import requests

if __name__ == '__main__':
    headers = {
      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 Edg/92.0.902.84"
    }
    baseurl = 'https://pvp.qq.com/web201605/js/herolist.json'
    r = requests.get(url=baseurl, headers=headers)
    data = r.json() # 英雄资料,包含cname、ename、skin_name
    for i in data:
      pprint(i) # 使用pprint打印数据原始格式
      
      cname = i["cname"]
      ename = i["ename"]
      
      try:
            skin_name = i["skin_name"].split("|") # 其中马超没有skin_name
      except Exception as e:
            print(e)
            
      for skin_num in range(1, len(skin_name) + 1):
            sk_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(ename) + "/" + str(
                ename) + "-bigskin-" + str(skin_num) + ".jpg" # url拼接
            try:
                data = requests.get(url=sk_url, headers=headers).content
                with open("img/" + cname + "-" + skin_name + ".jpg", "wb")as fp:
                  fp.write(data)
            except Exception as e :
                print(e)
      print(ename,"下载完成...") 4、结果


四、最后

  中间会有skin_name异常,一定要捕获异常,包管步调一直执行下去,而且出现了几次IP异常,下次尝试利用代理。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: ⚡王者农药皮肤图片获取!⚡