我用Python爬取英雄聯(lián)盟的皮膚,隔壁家的小弟弟都饞哭了

一、推理原理

1.先去《英雄聯(lián)盟》官網(wǎng)找到英雄及皮膚圖片的網(wǎng)址:

http://lol.qq.com/data/info-h

2.從上面網(wǎng)址可以看到所有英雄都在,按下F12查看源代碼,發(fā)現(xiàn)英雄及皮膚圖片并沒有直接給出,而是隱藏在JS文件中。這時(shí)候需要點(diǎn)開Network,找到j(luò)s窗口,刷新網(wǎng)頁,就看到一個(gè)champion.js的選項(xiàng),點(diǎn)擊可以看到一個(gè)字典——里面就包含了所有英雄的名字(英文)以及對(duì)應(yīng)的編號(hào)。

3.但是只有英雄的名字(英文)以及對(duì)應(yīng)的編號(hào)并不能找到圖片地址,于是回到網(wǎng)頁,隨便點(diǎn)開一個(gè)英雄,跳轉(zhuǎn)頁面后發(fā)現(xiàn)英雄及皮膚的圖片都在,但要下載還需要找到原地址,這是鼠標(biāo)右擊選擇“在新標(biāo)簽頁中打開”,新的網(wǎng)頁才是圖片的原地址。

4.圖中紅色框就是我們需要的圖片地址,經(jīng)過分析知道:每一個(gè)英雄及皮膚的地址只有編號(hào)不一樣(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復(fù)制代碼

第二步:從 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

復(fù)制代碼

第三步:從 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

復(fù)制代碼

第四步:下載并保存數(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("下載圖片出錯(cuò),%s" %(e))

? ? ? ? return False

復(fù)制代碼

第五步:執(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)

復(fù)制代碼

運(yùn)行后會(huì)在控制臺(tái)打印出每一張圖片的網(wǎng)址:

在文件夾中可以看到圖片已經(jīng)下載好 如圖:

本次講解就到這里了, 如果覺得講的不錯(cuò)的話, 點(diǎn)贊收藏關(guān)注一波, 持續(xù)更新中

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容