Python教你一鍵獲得【王者榮耀全皮膚】~~~

阿_旭發表於2020-12-03

額,不好意思標題後面少了"高清桌布"幾個字,既然進來了也應該不虧,本文一鍵擼取427張王者榮耀皮膚高清桌布並且打包好了,文末檢視獲取方式。並且手把手教你擼取所有桌布的全過程。

開篇

前幾天看到同事的桌面桌布是王者榮耀的炫酷后羿皮膚,覺得十分帥氣,於是想自己也弄一個,可是王者皮膚這麼多一個個點網頁找太費勁,何不一把擼下來一起看呢,於是想著把所有的英雄皮膚都下載到本地的一個目錄下面慢慢選多好,說幹就幹…那我們就開始吧。

網頁分析

首先,我們進去王者榮耀官網,點進“英雄資料”介面:

在這裡插入圖片描述

按F12開啟除錯臺,隨便點選一個英雄如後翌,找到英雄原皮膚的圖片地址:

在這裡插入圖片描述

滑鼠在英雄的不同皮膚頭像上滑動,發現圖片的url地址會發生變化,但是隻有最後一個數字在改變,進一步發現皮膚號是從1,2,3…一直往後編的。好了找到了圖片的編碼規律,下面我們再看看不同英雄的圖片url地址有什麼不同。

在這裡插入圖片描述

我們回到“英雄資料”介面,點選另外一個英雄露娜,對比一下后羿與露娜英雄桌布的url地址,發現僅僅有一個數字是不相同的,后羿是169,露娜是146,如下所示。因此我們猜測這個數字應該是代表的英雄編號。

# 后羿圖片url: 'game.gtimg.cn/images/yxzj/img201606/skin/heroinfo/169/169-bigskin-1.jpg'
# 露娜圖片url: 'game.gtimg.cn/images/yxzj/img201606/skin/heroinfo/146/146-bigskin-1.jpg'

繼續回到英雄資料的介面,按F5重新整理介面,看到有一個herolist.json的檔案:
在這裡插入圖片描述
將herolist.json檔案下載下來開啟一看如下圖,發現後翌的編號就是169。至此,我們已經完成了我們的分析工作,圖片的url地址以及英雄的編號還有皮膚名稱也都有了,下面來把照片打包擼下來吧。
在這裡插入圖片描述

編碼實現

首先下載herolist.json檔案,獲取檔案內容,並解析:

# 英雄編號及皮膚資訊
hero_list_url = 'https://pvp.qq.com/web201605/js/herolist.json'
# 傳送get請求獲取資料
hero_list = requests.get(hero_list_url)
# 將獲取json資料
hero_list_json = hero_list.json()

進行英雄編號以及圖片編號的url拼接:

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{}/{}-bigskin-{}.jpg'.format(hero_num, hero_num, pic_num),其中hero_num表示英雄編號,pic_num表示圖片編號,從1開始。

解析herolist.json,並進行圖片下載,為了防止被檢測出來是爬蟲,每次下載圖片隨機間隔0-1秒之間的時間,圖片儲存名稱為英雄名_皮膚名稱.jpg

for each_hero in hero_list_json:
    hero_name = each_hero['cname'] # 獲取英雄名稱
    hero_num = each_hero['ename']  # 獲取英雄編號
    # 獲取該英雄的皮膚名稱列表
    skin_name_list = each_hero.get('skin_name').split('|')if each_hero.get('skin_name') else []
    for i in range(10):
        pic_num = i + 1 # 圖片編號是從1開始的
        # # 有些圖片在json檔案中沒寫皮膚名稱, 就將皮膚名稱標為未知
        skin_name = skin_name_list[i] if i <= len(skin_name_list)  else '未知{}'.format(i)
        pic_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{}/{}-bigskin-{}.jpg'.format(hero_num, hero_num, pic_num)
        request_res = requests.get(pic_link)
        img_path_name = os.path.join(save_path_pre,'{}_{}.jpg'.format(hero_name, skin_name))
        if request_res.status_code == 200:
            with open(img_path_name, 'wb') as f:
                f.write(request_res.content)
            all_skin_counts += 1
            print('第{}張下載成功: {}|{}'.format(all_skin_counts,hero_name, skin_name))
            time_rand = random.random() 
            time.sleep(time_rand) #隨機間隔0-1秒的時間,防止被檢測出來是爬蟲

完整程式碼如下

import os
import requests
import time
import random
# 英雄編號及皮膚資訊
hero_list_url = 'https://pvp.qq.com/web201605/js/herolist.json'
# 傳送get請求獲取資料
hero_list = requests.get(hero_list_url)
# 將獲取json資料
hero_list_json = hero_list.json()

# 儲存目錄,須在本地建立
save_path_pre = 'F:/wzry_heropics'
if not os.path.exists(save_path_pre):
    os.makedirs(save_path_pre)
all_skin_counts = 0
for each_hero in hero_list_json:
    hero_name = each_hero['cname'] # 獲取英雄名稱
    hero_num = each_hero['ename']  # 獲取英雄編號
    # 獲取該英雄的皮膚名稱列表
    skin_name_list = each_hero.get('skin_name').split('|')if each_hero.get('skin_name') else []
    for i in range(10):
        pic_num = i + 1 # 圖片編號是從1開始的
        # # 有些圖片在json檔案中沒寫皮膚名稱, 就將皮膚名稱標為未知
        skin_name = skin_name_list[i] if i <= len(skin_name_list)  else '未知{}'.format(i)
        pic_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{}/{}-bigskin-{}.jpg'.format(hero_num,hero_num,pic_num)
        request_res = requests.get(pic_link)
        # 圖片儲存路徑
        img_path_name = os.path.join(save_path_pre,'{}_{}.jpg'.format(hero_name, skin_name))
        if request_res.status_code == 200:
            with open(img_path_name, 'wb') as f:
                f.write(request_res.content)
            all_skin_counts += 1
            print('第{}張下載成功: {}|{}'.format(all_skin_counts,hero_name, skin_name))
            time_rand = random.random()
            time.sleep(time_rand) #隨機間隔0-1秒的時間,防止被檢測出來是爬蟲

好了,爽了,終於搞定了。最終成功擼下了全部的427張高清全英雄皮膚照片,成果如下:
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

哈哈,終於可以方便的選擇自己喜歡的高清皮膚當桌面啦~~~

特別說明:本文僅供技術交流,切勿用作非法或者商業用途。

桌布 獲取方式:為方便喜歡王者榮耀高清英雄桌布的朋友獲取圖片 ,所有427張高清皮膚桌布均已為你打包準備好,掃碼關注下面公眾號,回覆’wzry’即可獲取!你也可以選擇到喜歡的高清英雄皮膚桌布哦~~~
在這裡插入圖片描述

相關文章