大家好,我是辰哥~
今天辰哥帶大家分析一波當前熱門手游《王者榮耀》英雄皮膚,比如皮膚上線時間、皮膚類型(勇者;史詩;傳說等)、價格。
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. 本文僅供讀者學習使用,不做其他用途!