獲得英雄聯盟原畫圖的方法(英雄聯盟原畫在哪個文件夾)

前言

作為喜歡讀書的我,也是很喜歡打遊戲的,之前看到有人爬王者榮耀的皮膚的,我可是王者榮耀的老玩家了,所以我把英雄聯盟給爬了。

哈哈哈,沒想到吧!

在本次的爬蟲教程的過程中,我也會分享給大家一些簡單實用的爬蟲小技巧。

夜太美,爬蟲就沒那麼危險

在爬取的時候,不要猛攻嘛~,啊啊。。人家伺服器受不了啊。。。

你要學會停頓,剋制一點,該 sleep 就 sleep。

趁著人家睡覺的時候,限制防範程度是最低的,能晚點就晚點爬,沒有看過凌晨4點的洛杉磯,但是你還可以看到凌晨4點的爬蟲呢。

這樣你的IP地址才不會容易被封。

用Python獲取英雄聯盟皮膚原畫?走過路過不要錯過

這裡多說一句,小編是一名python開發工程師,這裡有我自己整理了一套最新的python系統學習教程,包括從基礎的python腳本到web開發、爬蟲、數據分析、數據可視化、機器學習等。想要這些資料的可以關注小編,並私信“01”領取。

善於利用他人的UA

如果你在看別人網站的robots.txt,你就會看到別人的聲明,聲明什麼內容可以爬,什麼內容不可以爬。但是,不要忽略了人家的聲明,希望給什麼搜索引擎爬,比如下面這個

用Python獲取英雄聯盟皮膚原畫?走過路過不要錯過

看到沒,這個別人定義的robots.txt值得注意的是User-Agent,那麼當你在Python構造headers的時候,User-Agent就直接指定它們的robots定義的就好了啊,比如:百度的UA,Google的UA或者是搜狗的UA等等。你再去爬爬看,那叫一個友好啊。

爬蟲過程

分析網頁

通過開發者模式F12,你就會發現箭頭所指的文件了,沒有看到的話,刷新一下試試。

用Python獲取英雄聯盟皮膚原畫?走過路過不要錯過

url0 = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js'
try:
    response = requests.get(url0, headers=headers)
    response.raise_for_status()
    response.encoding = response.apparent_encoding  # 設置編碼格式
    hreolist = response.json() # 將Response轉換成json格式
    print(hreolist) # 列印出英雄列表
    print(len(hreolist['hero']))    # 列印英雄個數:151
except Exception as e:
    print(e)
複製代碼

通過上面的代碼,我成功的獲取到了所有的英雄,以及英雄的總個數。

這裡只是截取部分的列印信息

{'hero': [{'heroId': '1', 'name': '黑暗之女', 'alias': 'Annie', 'title': '安妮', 'roles': ['mage'], 'isWeekFree': '0', 'attack': '2', 'defense': '3', 'magic': '10', 'difficulty': '6', 'selectAudio': 'https://game.gtimg.cn/images/lol/act/img/vo/choose/1.ogg', 'banAudio': 'https://game.gtimg.cn/images/lol/act/img/vo/ban/1.ogg', 'isARAMweekfree': '0', 'ispermanentweekfree': '0', 'changeLabel': '無改動', 'goldPrice': '4800', 'couponPrice': '2000', 'camp': '', 'campId': '', 'keywords': '安妮,黑暗之女,火女,Annie,anni,heianzhinv,huonv,an,hazn,hn'}
複製代碼

通過上面的json信息其實你會發現,英雄的列表信息是寫在了hero下的。

獲取每一位英雄的ID值

通過剛剛獲取到的json值,你會發現,這些值裡面有一個鍵:'heroId',那麼這個'heroId'是用來做什麼的呢?

這個我開始是不知道的,接下來我進入到了皮膚原畫的網址,馬上就霍然開朗了

安妮
奧拉夫
莉莉婭
複製代碼

通過上面的三個URL地址你就會發現heroId就是一個查詢參數id。

但是在這裡有一個坑,想必你也看到了,英雄的個數只有151個,id值卻是876,。沒錯,在前100多個英雄都不會有什麼問題很有規律,但是100多之後就出現問題了,每個英雄的id值跳轉的很多,所以要進入每一位英雄的原畫去爬圖片就必須要正確拼接URL。每位英雄的ID值獲取就成了必不可少的一步。

url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js'
hero_list_json = hreolist
hero_lists = hero_list_json['hero']     # 獲取英雄列表
heros_id = list(map(lambda x: x['heroId'], hero_lists))     # 獲取英雄編號
複製代碼

分析原畫網頁

打開開發者模式,你會發現一個文件

用Python獲取英雄聯盟皮膚原畫?走過路過不要錯過

在上圖中可以看到skins有10個值,點開第一個可以看到loadingImg,而這個鍵對應的值就是皮膚原畫的URL地址。

當然,作為老玩家們都知道,莉莉婭只有兩種皮膚,但是skins裡面為什麼有10個值,依次點開第三個至第十個,會發現其餘的loadingImg的值都是空的。

url_list = []   # 保存每一位英雄信息的url地址
for hero_id in heros_id:
       url = 'https://game.gtimg.cn/images/lol/act/img/js/hero/{}.js'.format(hero_id)
       # print(url)
       url_list.append(url)
複製代碼
url1 = 'https://game.gtimg.cn/images/lol/act/img/js/hero/876.js'
try:
    response = requests.get(url1, headers=headers)
    response.raise_for_status()
    response.encoding = response.apparent_encoding  # 設置編碼格式
    hreo_info = response.json()
    skins = hreo_info['skins']  # 獲取英雄皮膚信息
    # 遍歷每一個皮膚的loadingImg與皮膚名稱
    for skin in skins:
        print(skin['loadingImg'])
        print(skin['name'])

except Exception as e:
    print(e)
複製代碼

通過上面的兩組代碼的思路,那麼已經可以實現一個英雄的皮膚原畫的爬取了,需要獲取所有的皮膚原畫,無非就是多一個循環。

當你會爬第一個英雄的原畫時,你還怕得不到其他英雄嗎?

結語

爬取英雄聯盟的英雄原畫的思路已經分享給大家了。

請問親愛的讀者,你是否可以將王者榮耀的英雄皮膚全部拿下呢?

相信你絕對是沒有問題的,加油!

原創文章,作者:編程阿喵,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/345113.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
編程阿喵的頭像編程阿喵
上一篇 2025-02-12 15:21
下一篇 2025-02-12 15:21

相關推薦

發表回復

登錄後才能評論