20行Python程式碼爬取王者榮耀全英雄皮膚
引言
王者榮耀大家都玩過吧,沒玩過的也應該聽說過,作為時下最火的手機MOBA遊戲,咳咳,好像跑題了。我們今天的重點是爬取王者榮耀所有英雄的所有皮膚,而且僅僅使用20行Python程式碼即可完成。
準備工作
爬取皮膚本身並不難,難點在於分析,我們首先得得到皮膚圖片的url地址,話不多說,我們馬上來到王者榮耀的官網:
我們點選英雄資料,然後隨意地選擇一位英雄,接著F12開啟除錯臺,找到英雄原皮膚的圖片地址:
接著,我們切換一下英雄的皮膚,會發現圖片地址沒有明顯的變化,只是最後的數字序號改變了,我們將兩個皮膚圖片的地址放在一起比較一下:
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/523/523-bigskin-1.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/523/523-bigskin-2.jpg
我們可以猜測,對於同一個英雄的皮膚圖片地址,僅僅是最後的數字序號不同,為了證實我們的猜想,我們可以繼續找出一個英雄的全皮膚圖片,找一個皮膚多一點的,例如我這裡找的是孫尚香,將它的所有皮膚圖片地址放在一起比較:
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-1.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-2.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-3.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-4.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-5.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-6.jpg
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-7.jpg
由此我們得出結論,同一個英雄的皮膚圖片路徑從1開始依次遞增,我們再來看看不同英雄之間是如何區分的。會發現,不管皮膚圖片如何改變,瀏覽器上方的地址始終是不變的,所以我們將兩個不同英雄的url地址放到一起比較一下:
https://pvp.qq.com/web201605/herodetail/523.shtml
https://pvp.qq.com/web201605/herodetail/111.shtml
乍一看,似乎沒有什麼規律,但我們要從這裡發現一點,就是最後的數字其實控制的是哪個英雄,我們暫且認為它是英雄的編號,可不幸的是,英雄編號之間好像沒有什麼規律,不用著急,我們再到官網上找找線索。
在英雄資料介面,我們開啟F12除錯臺,通過抓取網路請求,我發現了幾個檔案:
點選網路,然後點選XHR,就可以看到這幾個檔案,看到檔案的名字大家應該就清楚了,這些檔案儲存的就是英雄列表資訊,我們點選檢視一下:
沒錯,這裡儲存的就是英雄資訊,包括英雄的名字,英雄編號等等其它資訊,我們可以試試這些資訊的準確性,例如小喬的ename,也就是英雄編號為106,所以按照之前的想法,英雄小喬的詳情地址應為:https://pvp.qq.com/web201605/herodetail/106.shtml
經過嘗試後發現確實如此。
到這裡,準備工作就完成了,其實進行到這裡,整個工程就完成了一半了,接下來就是程式碼的實現了。
程式碼實現
首先我們建立一個Python檔案,然後匯入os和requests模組。
按照前面的步驟,我們首先需要獲取到英雄列表資訊,也就是herolist.json檔案,檔案地址為:https://pvp.qq.com/web201605/js/herolist.json,這在除錯臺中可以找到。
那麼我們首先就要通過這個地址獲取到英雄列表資訊的json資料,然後解析json資料,將有用的資訊提取出來:
url = 'https://pvp.qq.com/web201605/js/herolist.json'
herolist = requests.get(url) # 獲取英雄列表json檔案
herolist_json = herolist.json() # 轉化為json格式
hero_name = list(map(lambda x: x['cname'], herolist.json())) # 提取英雄的名字
hero_number = list(map(lambda x: x['ename'], herolist.json())) # 提取英雄的編號
這樣我們就獲取到了英雄名字和編號,可以輸出測試一下:
拿到了英雄編號之後,事情就變得很簡單了,只需拼接一下url地址即可:
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + hero_number + '/' + hero_number + '-bigskin-1.jpg
,這樣可以獲取到所有英雄的皮膚圖片了,但是這裡會有一個問題,英雄的皮膚是有多有少的,有的英雄只有兩個皮膚,有的卻有六七個,所以圖片編號的最大值我們並不清楚,這裡我採用了一個比較笨的辦法,就是讓一個變數從1到10依次遞增去拼接圖片地址,如果遇到沒有的圖片我們就不處理,因為沒有一個英雄的皮膚超過了10個,所以我們就能獲取到所有的圖片了。下面看程式碼實現:
# 下載圖片
def downloadPic():
i = 0
for j in hero_number:
# 建立資料夾
os.mkdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])
# 進入建立好的資料夾
os.chdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])
i += 1
for k in range(10):
# 拼接url
onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(
j) + '-bigskin-' + str(k) + '.jpg'
im = requests.get(onehero_link) # 請求url
if im.status_code == 200:
open(str(k) + '.jpg', 'wb').write(im.content) # 寫入檔案
實現非常地簡單,程式碼註釋也已經寫得很清楚了,有了這個函式之後,我們只需呼叫一下,就可以下載圖片了,整個程式的完整程式碼如下:
import os
import requests
url = 'https://pvp.qq.com/web201605/js/herolist.json'
herolist = requests.get(url) # 獲取英雄列表json檔案
herolist_json = herolist.json() # 轉化為json格式
hero_name = list(map(lambda x: x['cname'], herolist.json())) # 提取英雄的名字
hero_number = list(map(lambda x: x['ename'], herolist.json())) # 提取英雄的編號
# 下載圖片
def downloadPic():
i = 0
for j in hero_number:
# 建立資料夾
os.mkdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])
# 進入建立好的資料夾
os.chdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])
i += 1
for k in range(10):
# 拼接url
onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(
j) + '-bigskin-' + str(k) + '.jpg'
im = requests.get(onehero_link) # 請求url
if im.status_code == 200:
open(str(k) + '.jpg', 'wb').write(im.content) # 寫入檔案
downloadPic()
除去註釋,接近20行的程式碼我們就完成了王者榮耀全英雄皮膚的爬取,是不是非常簡單呢?我們可以測試一下這個程式,首先要在桌面上建立一個資料夾,名為wzry,因為這裡的程式碼我已經寫死了,如果要修改的話大家也可以進行修改,資料夾建立完成後點選執行即可,等待片刻,圖片就全部下載完成了。
對於程式中json字串的解析,我們還可以使用jsonpath模組來進行,使用該模組能夠更加快捷地獲取到我們想要的資訊,解析方式如下:
hero_name = jsonpath.jsonpath(html_json, "$..cname")
hero_number = jsonpath.jsonpath(html_json, "$..ename")
該方法接收一個json字串和解析規則,$…cname則表示從根目錄下找尋任意位置的以cname為鍵的值,並放入字典中。
結尾
爬蟲是非常有趣的,因為它非常直觀,視覺衝擊感強,寫出來也很有成就感,爬蟲雖然強大,但千萬不能隨意爬取隱私資訊。
最後,如果對文中程式有更好的建議,歡迎評論區留言。
相關文章
- 爬蟲小程式 - 爬取王者榮耀全皮膚爬蟲
- Python爬取王者榮耀英雄皮膚高清圖片Python
- python爬取王者榮耀皮膚Python
- 用Python爬取"王者農藥"英雄皮膚Python
- Python3爬取英雄聯盟英雄皮膚大圖Python
- 用Python爬取英雄聯盟(lol)全部皮膚Python
- 用Python爬取《王者榮耀》英雄皮膚資料並視覺化分析,用圖說話Python視覺化
- python 爬取 mc 皮膚Python
- Python教你一鍵獲得【王者榮耀全皮膚】~~~Python
- python對英雄皮膚進行圖片採集~Python
- python 爬蟲 mc 皮膚站 little skin 的簡單爬取Python爬蟲
- Python 爬取 "王者榮耀.英雄桌布" 過程中的矛和盾Python
- Python獲取英雄聯盟皮膚原畫:新手玩家們都懵了!Python
- 測試程式碼高亮-CSDN預設皮膚
- ViewPager系列之-仿掌上英雄聯盟皮膚瀏覽效果Viewpager
- 60行程式碼爬取知乎神回覆行程
- 90行程式碼爬取我的微博行程
- 爬取某網站寫的python程式碼網站Python
- Python例子之下載王者榮耀全部英雄海報Python
- QT皮膚(QSS)程式設計QT程式設計
- 【隨便寫寫】存一下皮膚程式碼
- 小喬皮膚
- 天美分享《王者榮耀》五週年李小龍限定皮膚創作歷程
- 顯示皮膚行業2021年總結及2022年展望(上):大尺寸顯示皮膚行業
- Python網路爬蟲之爬取淘寶網頁頁面 MOOC可以執行的程式碼Python爬蟲網頁
- 如何使用Media Encoder中的「編碼」皮膚和「佇列」皮膚詳解佇列
- 30行js爬取頂點全網任意小說JS
- 如何爬取視訊的爬蟲程式碼原始碼爬蟲原始碼
- 王者榮耀為什麼會保留銘文系統和皮膚屬性加成?
- 使用 Scrapy 爬取股票程式碼
- 爬取行政區劃程式碼
- python爬蟲之多執行緒、多程式+程式碼示例Python爬蟲執行緒
- 部落格皮膚
- python 列出皮膚資料所有變數名Python變數
- 《蟻族崛起》今日ios上線新英雄新皮膚再掀微觀大戰iOS
- 如何使用python進行網頁爬取?Python網頁
- TP二開淘客程式 New新皮膚
- 瀏覽器皮膚瀏覽器