前兩天看到同學用python爬下來LOL的皮膚圖片,感覺挺有趣的,我也想試試,於是決定來爬一爬王者榮耀的英雄和皮膚圖片。
首先,我們找到王者的官網http://pvp.qq.com/web201605/herolist.shtml,我們可以在里面找到王者所有的英雄。
然后,簡單的分析一下結構,看看是否有反爬機制。

之后,在上網查閱資料后,發現所有的英雄編號,名字和皮膚都存放在一個叫herolist.json的文件中,但是我打開這個文件卻是一堆意義不明的符號,不過這並不影響我們繼續。

接下來我們點擊進入英雄的詳情頁面,發現皮膚的地址都是相同格式的



我們不難發現其中的規律,那么接下來我們就要開始寫代碼了。
完整代碼如下:
import requests
import json
import os
import time
start = time.time()
url = requests.get('http://pvp.qq.com/web201605/js/herolist.json').content
jsonFile = json.loads(url) # 提取json
x = 0 # 計數器,記錄下載了多少張圖片
# 創建目錄
hero_dir = 'D:\wzry\wzry'
if not os.path.exists(hero_dir):
os.mkdir(hero_dir)
try: #使用一個簡單的異常處理,防止代碼在運行時出現錯誤
for m in range(len(jsonFile) - 1):
ename = jsonFile[m]['ename'] # 編號
cname = jsonFile[m]['cname'] # 英雄名字
skinName = jsonFile[m]['skin_name'].split('|')
skinNumber = len(skinName)
# 下載圖片,構造圖片網址
for bigskin in range(1, skinNumber + 1):
urlPicture = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(ename) + '/' + str(
ename) + '-bigskin-' + str(bigskin) + '.jpg'
picture = requests.get(urlPicture).content # 獲取圖片的二進制信息
with open(hero_dir + cname + "-" + skinName[bigskin - 1] + '.jpg', 'wb') as f: # 保存圖片
f.write(picture)
x = x + 1
print("正在下載第" + str(x) + "張圖片")
except Exception:
print()
else:
print()
下面是我的運行結果

