小三:「怎麼了小二?一副無精打彩的樣子!」html
小二:「唉!別提了,還不是最近又接觸了一個叫英雄聯盟的遊戲,遊戲中不少皮膚都須要花錢買,可是我錢不夠呀...」python
小三:「咋得,錢攢夠了你還要買呀?還吃不吃飯了?!要我說,你乾脆將英雄的炫彩皮膚都爬下來欣賞一下得了,飯錢還給你省下了。」json
小二:「你說的也對,畢竟吃飯更重要,那我仍是爬取皮膚欣賞一下算了。」app
首先,咱們打開英雄聯盟官網主頁,網址爲:https://lol.qq.com/main.shtml
,而後向下拉,能夠看到英雄列表,如圖所示:工具
接着隨意選一個英雄點擊進入看一下,如圖所示:url
再點擊鼠標右鍵,接着選擇檢查
,看一下皮膚的 URL,如圖所示:spa
經過觀察,能夠發現英雄皮膚 URL 組成方式爲:https://game.gtimg.cn/images/lol/act/img/skin/big + 英雄id + 皮膚id.jpg
。3d
咱們先看皮膚id
,也就是看皮膚的個數,選擇開發者工具的Network
項,以後刷新一下頁面,能夠發現有一個17.js
的請求,17
實際就是英雄id
,如圖所示:code
再選擇Response
項看一下相應數據,如圖所示:orm
咱們能夠看到數據都顯示在了一行,看着不太方便,咱們將其格式化看一下,如圖所示:
經過觀察,能夠發現獲取指定英雄皮膚id
的 URL 就是:https://game.gtimg.cn/images/lol/act/img/js/hero/ + 英雄id.js
,獲取皮膚id
及下載皮膚圖片的代碼實現以下:
hero_skin_url = 'https://game.gtimg.cn/images/lol/act/img/js/hero/' + hero_id + '.js' # 經過 url 獲取英雄的皮膚數量 skin_text = requests.get(hero_skin_url).text skin_json = json.loads(skin_text) skin_list = skin_json['skins'] # 獲取皮膚名 hero_skins.clear() for skin in skin_list: hero_skins.append(skin['name'].replace('/', '').replace('\\', '').replace(' ', '')) # 皮膚數量 skins_num = len(hero_skins) s = '' for i in tqdm(range(skins_num), desc='【' + hero_name + '】皮膚下載'): if len(str(i)) == 1: s = '00' + str(i) elif len(str(i)) == 2: s = '0' + str(i) elif len(str(i)) == 3: pass try: # 拼接指定皮膚的 url skin_url = 'https://game.gtimg.cn/images/lol/act/img/skin/big' + hero_id + '' + s + '.jpg' img = requests.get(skin_url) except: # 沒有炫彩皮膚 url 則跳過 continue # 保存皮膚圖片 if img.status_code == 200: with open(hero_skins[i] + '.jpg', 'wb') as f: f.write(img.content)
如今就差英雄id
參數的獲取了,咱們接着看如何獲取所有的英雄id
,返回到 https://lol.qq.com/main.shtml
頁面,打開開發者工具並選擇Network
,而後刷新頁面,咱們能夠觀察到有一個hero_list.js
的請求,如圖所示:
與皮膚id
的獲取基本相似,經過這個請求就能夠獲取到英雄的所有英雄id
,代碼實現以下:
url = 'https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js' hero_text = requests.get(url).text # 轉爲 json 格式 hero_json = json.loads(hero_text)['hero'] path = os.getcwd() # 獲取當前文件夾路徑 workspace = os.getcwd() # 皮膚路徑 skin_path = "{}\\{}".format(workspace, 'skins') # 遍歷列表 for hero in hero_json: # 將每個英雄的 id、name 放入一個字典中 hero_dict = {'id': hero['heroId'], 'name': hero['name']} # 放入列表 heros.append(hero_dict)
咱們能夠看出:代碼中除了英雄id
,還獲取了英雄name
,並將每個英雄的id
、name
放在了一個字典中,又將全部英雄對應的字典放在了列表中。
最後,咱們看一下下載效果:
源碼在公衆號 Python小二 後臺回覆 201130 獲取。