王者荣耀皮肤图片爬取

思路

英雄资料列表页-英雄介绍-王者荣耀官方网站-腾讯游戏 (qq.com)

1.先进入官网的英雄/皮肤界面

 

 2.但是这个界面是不显示皮肤的,所以需要先找找皮肤在哪,先随便点个英雄头像进去

 

 3.然后发现里面的界面的结构,是直接将皮肤图片作为背景,然后点击右下角选择皮肤图片

  那总之先打开网页检查,看一下背景图片的代码

 

 成功找到了关键的图片url

但是为了下载图片需要搞明白这个url的组成

  在这一页找不到线索了,所以回到前一页,发现了一个可疑的请求

 

 返回了一堆json加密内容,直接对它进行一个解密

 

 这样一对照,url的组成就很容易猜到了

  url中的数字就是这个类似英雄编号的ename,后面的数字则是皮肤的序号

这样就可以直接通过代码获取所有的url,也就是所有的皮肤图片了

代码

import requests
import json
import os
import time

#程序开始时间
st = time.time()
url = 'http://pvp.qq.com/web201605/js/herolist.json'
# 获取 json 内容
response=requests.get(url).content

# 提取 Json 信息
jsonData=json.loads(response)
# 打印查看
print(jsonData)

# 初始化下载数量
x = 0

hero_dir='imgs/'
#目录不存在则创建
if not os.path.exists(hero_dir):
     os.mkdir(hero_dir)

for m in range(len(jsonData)):
    # 英雄编号
    ename = jsonData[m]['ename']
    # 英雄名称
    cname = jsonData[m]['cname']
    # 皮肤名称,一般英雄会有多个皮肤
    skinName = jsonData[m]['skin_name'].split('|')
    # 皮肤数量
    skinNumber = len(skinName)

    # 循环遍历处理
    for bigskin in range(1,skinNumber+1):
        # 拼接下载图片url
        picUrl = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'+str(ename)+'/'+str(ename)+'-bigskin-'+str(bigskin)+'.jpg'
        #获取图片内容
        picture = requests.get(picUrl).content
        # 保存图片
        with open( hero_dir + cname + "-" + skinName[bigskin-1]+'.jpg','wb') as f:
            f.write(picture)
            x=x+1
            print("当前下载第"+str(x)+"张皮肤")
# 获取结束时间
end = time.time()
# 计算执行时间
exec_time = end-st
print("找到并下载"+str(x)+"张图片,总共用时"+str(exec_time)+"秒。")

 

posted @ 2021-10-11 21:24  雾雨黑白  阅读(306)  评论(0编辑  收藏  举报