大家好,我是辰哥~
今天辰哥帶大家分析一波當前熱門手遊《王者榮耀》英雄皮膚,比如皮膚上線時間、皮膚型別(勇者;史詩;傳說等)、價格。
1.獲取資料
資料來源於《王者榮耀官方網站》,網頁資料如下:
所需內容:
英雄名稱
英雄皮膚名稱
上線時間
皮膚型別(勇者;史詩;傳說等)
價格(這個在官方沒有獲取到,是辰哥這邊手動統計的)
首先通過檢視network分析獲取所有皮膚的資料(通過分析發現是非同步載入的)
檢視響應資料
url = "https://pvp.qq.com/zlkdatasys/data_zlk_xpflby.json"
response = requests.get(url).json()
for i in response['pcblzlby_c6']:
print(i['pcblzlbybt_d3'],i['lbyrq_e5'],i['pcblzlbyxqydz_c4'])
這裡只獲取到英雄皮膚名稱、上線時間以及皮膚詳細資訊連結(包含皮膚型別、對應英雄)
這裡只獲取到了189款皮膚(9*21=189),接著在繼續通過非同步請求獲得的皮膚詳細資訊連結,去獲取皮膚的具體資訊。
以其中一個皮膚為例
可以獲取到皮膚型別(傳說);皮膚名稱(仲夏夜之夢);對應英雄(貂蟬);
通過檢視原始碼可以發現所需內容對應的網頁標籤,其中皮膚型別是圖片的形式展示,但是我們需要的是文字內容,但是也不併非無規律可尋
皮膚型別規律:
勇者:1.png
限定:5.png
史詩:12.png
傳說:15.png
KPL限定:19.png
情人節限定:24.png
榮耀典藏:26.png
FMVP:38.png
戰令限定:40.png
其他:剩下的就歸類到其他類(賽季限定等等)
上面的規律是皮膚型別圖片對應的文字內容。
url = "https:"+"//pvp.qq.com/coming/v2/skins/141-5.shtml"
response = requests.get(url)
response.encoding = 'gbk'
text = response.text
selector = etree.HTML(text)
img = selector.xpath('//*[@id="showSkin"]/div/img/@src')[0]
print(frompic_gettext(img))
skin = selector.xpath('//*[@id="showSkin"]/div/div[2]/span[1]/text()')[0]
print(skin)
hero = selector.xpath('//*[@id="showSkin"]/div/div[2]/span[2]/text()')[0]
print(hero)
text = selector.xpath('//*[@id="showSkin"]/div/p/text()')[0]
print(text)
最終獲取全部(189)的皮膚資訊
url = "https://pvp.qq.com/zlkdatasys/data_zlk_xpflby.json"
response = requests.get(url).json()
for i in response['pcblzlby_c6']:
types,skin,hero,text = getdetail(str(i['pcblzlbyxqydz_c4']))
print(hero,skin,i['lbyrq_e5'],types,text)
輸出結果:
最後將資料儲存到excel,並手動統計皮膚對應的價格
在點券這列:
1.有具體點券資訊的就直接統計(不包含首周優惠)
2.賽季專屬的用0表示(免費獲得)
3.戰令限定的預設388(購買戰令進階)
4.其他一些抽獎,奪寶的直接用對應文字統計。
在皮膚型別這裡也清洗了一下(比如五五開黑節,牛年限定等等)
2.視覺化
先來給口號欄位做一下詞雲圖
這裡直接使用辰哥的視覺化平臺進行製作
(show.chenlove.cn)
以下的視覺化圖表都直接在上面的平臺一鍵生成
上傳前面的excel檔案,
選擇口號欄位和詞雲圖背景;
點選生成詞雲圖
點選匯出,下載到本地
同樣一鍵給皮膚欄位做一下詞雲圖
上線時間分析
統計每年釋出的皮膚數量
df = pd.read_excel("王者榮耀英雄皮膚.xlsx")
time = df["上線時間"].tolist()
clear_time = [str(i)[0:4] for i in time]
result = Counter(clear_time)
# 排序
d = sorted(result.items(), key=lambda x: x[1], reverse=True)
t = [i[0] for i in d]
v = [i[1] for i in d]
"""
['2020', '2019', '2021', '2018', '2017']
[47, 44, 43, 42, 14]
"""
同樣的還是使用辰哥的視覺化平臺(選擇餅圖)
對結果進行視覺化
可以看出從2017~2021上線皮膚數量逐年增加,由於2021年剛過一半,所以還未超過2020年的數量。
分析每年幾月皮膚數量最多
統計2017~2021年皮膚數量最多的月份
for j in [str(i)[0:6] for i in time]:
if "2017" in str(j):
t_2017.append(j[4:6])
if "2018" in str(j):
t_2018.append(j[4:6])
if "2019" in str(j):
t_2019.append(j[4:6])
if "2020" in str(j):
t_2020.append(j[4:6])
if "2021" in str(j):
t_2021.append(j[4:6])
# 排序
d_2017 = sorted(Counter(t_2017).items(), key=lambda x: x[1], reverse=True)
d_2018 = sorted(Counter(t_2018).items(), key=lambda x: x[1], reverse=True)
d_2019 = sorted(Counter(t_2019).items(), key=lambda x: x[1], reverse=True)
d_2020 = sorted(Counter(t_2020).items(), key=lambda x: x[1], reverse=True)
d_2021 = sorted(Counter(t_2021).items(), key=lambda x: x[1], reverse=True)
print("2017",d_2017[0])
print("2018",d_2018[0])
print("2019",d_2019[0])
print("2020",d_2020[0])
print("2021",d_2021[0])
"""
2017 ('10', 3)
2018 ('10', 6)
2019 ('02', 10)
2020 ('01', 14)
2021 ('02', 10)
"""
可以看到在2017和2018年10月上線皮膚較多,從19年開始,過年時當月上線的皮膚數量比同年其他月份數量多。
不同點券價格
統計excel中點券一列中包含幾種價格,並進行排序
price = df["點券"].tolist()
clear_price = [str(i) for i in price]
result = Counter(clear_price)
# 排序
d = sorted(result.items(), key=lambda x: x[1], reverse=True)
t = [i[0] for i in d]
v = [i[1] for i in d]
"""
['888', '1788', '0', '388', '1688', '60', '奪寶', '488', '抽獎', '貴族限定', '660']
[52, 30, 28, 21, 19, 17, 13, 6, 2, 1, 1]
"""
將結果匯入視覺化平臺,生成視覺化圖
其中第三個是0,因為賽季皮膚可以免費獲取(所需點券為0),以上就是《王者榮耀》獲得皮膚的幾種價格,像奪寶抽獎這種靠運氣,無法去衡量點券,所以就直接展示中文意思。
幾種不同皮膚型別
統計excel中型別欄位,並排序
"""
['史詩', '勇者', '限定', '戰令限定', '其他', '賽季限定', 'KPL限定',
'FMVP', '榮耀典藏', '情人節限定', '鼠年限定', '豬年限定', '牛年限定',
'五五開黑節', '傳說', '狗年限定', '五週年限定', '四週年限定', '三週年限定', '戰隊賽專屬', '二週年限定']
[27, 27, 26, 21, 20, 18, 9, 6, 6, 5, 5, 5, 4, 2, 2, 2, 1, 1, 1, 1, 1]
"""0
當前統計到是20種型別,但遠不止20,因為對於“其他”標籤的還包含多種,因此皮膚型別起碼20+,估計20多種。此外還可以看出史詩和勇者這兩個型別的皮膚是較多的。
同一種點券對應不同皮膚型別
同一種點券價格對應多種皮膚型別
比如888點券對應【'限定', '史詩', 'KPL限定', '五五開黑節', '情人節限定'等】
分別統計點券為888;1788;1688;0(免費)對應哪些皮膚型別,並繪製關係圖(同樣也是使用視覺化平臺進行繪製)
for i in range(0,len(price)):
if str(price[i])=="888":
if tp[i] not in c_888:
c_888.append(tp[i])
if str(price[i])=="1788":
if tp[i] not in c_1788:
c_1788.append(tp[i])
if str(price[i])=="0":
if tp[i] not in c_0:
c_0.append(tp[i])
if str(price[i])=="1688":
if tp[i] not in c_1688:
c_1688.append(tp[i])
"""
888 ['限定', '史詩', 'KPL限定', '五五開黑節', '情人節限定', '勇者', '豬年限定', '其他', '二週年限定']
1788 ['限定', '情人節限定', '牛年限定', 'KPL限定', '鼠年限定', '豬年限定', '狗年限定']
0 ['其他', '賽季限定', '五週年限定', '四週年限定', '勇者', '三週年限定', '戰隊賽專屬']
1688 ['限定', 'FMVP', '傳說', '其他']
"""
888點券對應皮膚型別
1788點券對應皮膚型別
0點券對應皮膚型別
1688點券對應皮膚型別
今天的文章就到這裡了
上面所涉及的視覺化都是通過辰哥的視覺化平臺進行製作。感興趣的小夥伴可以去看看(show.chenlove.cn)
最後
1. 本文詳細介紹了python爬蟲獲取《王者榮耀》英雄皮膚資訊並且視覺化
2. 本文僅供讀者學習使用,不做其他用途!