一固蛾、推理原理
1.先去《英雄聯(lián)盟》官網(wǎng)找到英雄及皮膚圖片的網(wǎng)址:
http://lol.qq.com/data/info-h…
2.從上面網(wǎng)址可以看到所有英雄都在,按下F12查看源代碼,發(fā)現(xiàn)英雄及皮膚圖片并沒有直接給出余黎,而是隱藏在JS文件中奠滑。這時候需要點開Network,找到js窗口室抽,刷新網(wǎng)頁晴竞,就看到一個champion.js的選項,點擊可以看到一個字典——里面就包含了所有英雄的名字(英文)以及對應的編號狠半。
3.但是只有英雄的名字(英文)以及對應的編號并不能找到圖片地址噩死,于是回到網(wǎng)頁,隨便點開一個英雄神年,跳轉頁面后發(fā)現(xiàn)英雄及皮膚的圖片都在已维,但要下載還需要找到原地址,這是鼠標右擊選擇“在新標簽頁中打開”已日,新的網(wǎng)頁才是圖片的原地址垛耳。
4.圖中紅色框就是我們需要的圖片地址,經(jīng)過分析知道:每一個英雄及皮膚的地址只有編號不一樣(ossweb-img.qq.com/images/lol/…
二飘千、推理代碼
第一步:獲取js字典
defpath_js(url_js):res_js=requests.get(url_js,verify=False).contenthtml_js=res_js.decode("gbk")pat_js=r'"keys":(.*?),"data"'enc=re.compile(pat_js)list_js=enc.findall(html_js)dict_js=eval(list_js[0])returndict_js復制代碼
第二步:從 js字典中提取到key值生成url列表
def path_url(dict_js):
? ? pic_list = []
? ? for key in dict_js:
? ? ? ? for i in range(20):
? ? ? ? ? ? xuhao = str(i)
? ? ? ? ? ? if len(xuhao) == 1:
? ? ? ? ? ? ? ? num_houxu = "00" + xuhao
? ? ? ? ? ? elif len(xuhao) == 2:
? ? ? ? ? ? ? ? num_houxu = "0" + xuhao
? ? ? ? ? ? numStr = key+num_houxu
? ? ? ? ? ? url = r'http://ossweb-img.qq.com/images/lol/web201310/skin/big'+numStr+'.jpg'
? ? ? ? ? ? pic_list.append(url)
? ? print(pic_list)
? ? return pic_list
復制代碼
第三步:從 js字典中提取到value值生成name列表
def name_pic(dict_js, path):
? ? list_filePath = []
? ? for name in dict_js.values():
? ? ? ? for i in range(20):
? ? ? ? ? ? file_path = path + name + str(i) + '.jpg'
? ? ? ? ? ? list_filePath.append(file_path)
? ? return list_filePath
復制代碼
第四步:下載并保存數(shù)據(jù)
def writing(url_list, list_filePath):
? ? try:
? ? ? ? for i in range(len(url_list)):
? ? ? ? ? ? res = requests.get(url_list[i], verify = False).content
? ? ? ? ? ? with open(list_filePath[i], "wb") as f:
? ? ? ? ? ? ? ? f.write(res)
? ? except Exception as e:
? ? ? ? print("下載圖片出錯,%s" %(e))
? ? ? ? return False
復制代碼
第五步:執(zhí)行主程序
if __name__ == '__main__':
? ? url_js = r'http://lol.qq.com/biz/hero/champion.js'
? ? path = r'./data/'? #圖片存在的文件夾
? ? dict_js = path_js(url_js)
? ? url_list = path_url(dict_js)
? ? list_filePath = name_pic(dict_js, path)
? ? writing(url_list, list_filePath)
復制代碼
運行后會在控制臺打印出每一張圖片的網(wǎng)址:
在文件夾中可以看到圖片已經(jīng)下載好 如圖:
本次講解就到這里了堂鲜, 如果覺得講的不錯的話, 點贊收藏關注一波护奈, 持續(xù)更新中