前兩天看到同學用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()
下面是我的運行結果