字典里是有這個鍵的,運行完程式后報錯"keyerror"
import requests
import json
import os
url="https://pvp.qq.com/web201605/js/herolist.json"
re = requests.get(url)
jsonFile = re.json()
for m in range(len(jsonFile)):
# 數字名字
ename = jsonFile[m]['ename']
# 漢語名字
cname = jsonFile[m]['cname']
# 切割后是字典 串列形式
skinName = jsonFile[m]["skin_name"].split('|')
# 計算每個英雄的皮膚多少
skinNumber = len(skinName)
print("{0}:{1}個皮膚{2}".format(cname,skinNumber,skinName))
# 此次回圈是為了下載圖片 構造圖片網址
for bigskin in range(1, skinNumber + 1): # 1-skinNumber
# 指定圖片網址
urlPicture = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(ename) + '/' + str(
ename) + '-bigskin-' + str(bigskin) + '.jpg'
# 獲取圖片資訊 圖片都是二進制 content就是獲取二級制資訊
picture = requests.get(urlPicture).content
# 保存資訊 保存圖片
if not os.path.exists(os.path.split('d:/hero/')[0]):
# 目錄不存在創建,makedirs可以創建多級目錄
os.makedirs(os.path.split('d:/hero/')[0])
with open('d:\\hero\\' + cname + skinName[bigskin - 1] + '.jpg', 'wb') as f:
f.write(picture)
print('*'*50)
print('所有的圖片均以下載完畢,默認存放在d:/hero/')
input('請按回車鍵幫你打開檔案夾......')
os.startfile ('d:/hero/' )
input('請按回車退出......')
uj5u.com熱心網友回復:
兄dei,字典可不是這樣用的。如果你的jsonFile是一個字典型別的話,如jsonFile = {'ename':'xxx'}可直接用jsonFile['ename']得到的就是字典中的值xxx。如果jsonFile是一個串列,而串列中保存的又是字典型別的值那么是可以用你代碼中方法去訪問的。如jsonFile = [{'ename':'xxx'},{'ename':'xxxx'}],這時就可以用jsonFile[m]['cname']去取值了。
但是我猜測你的jsonFile可能是這樣的{data:[{"ename":"xxx"},{"ename":"xxx"},{"ename":"xxx"}]}
這種情況的話,可以用如下方式訪問:
data = jsonFile['data']
for d in data:
ename = d['ename']
uj5u.com熱心網友回復:
剛好我也爬了一下王者榮耀的皮膚,這里的問題原因是,herolist.json,這個檔案回傳的json并不完備。其中,馬超這個英雄的物件中,缺少了skin_name,導致程式運行到馬超這個物件時,無法決議關鍵字skin_name。所以這里就涉及到了編程要考慮的一個大點:程式的健壯性,魯棒性,其中一個要素輸入合法性判斷。不能歸罪于herolist.json有誤,因為這是外部輸入,總會有不可避免的不兼容性。需要在呼叫herolist.json中相關欄位前,進行判斷,避免程式崩潰。
這個json資料也不夠完整,部分英雄的皮膚沒有全部列出,當然這個沒有影響這個程式運行。
uj5u.com熱心網友回復:
還真是,馬超這個沒有這個引數,這是騰訊的問題吧!轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/23120.html
