用python的requests第三方模塊抓取王者榮耀所有英雄的皮膚實(shí)例
本文使用python的第三方模塊requests爬取王者榮耀所有英雄的圖片,并將圖片按每個英雄為一個目錄存入文件夾中,方便用作桌面壁紙
下面時具體的代碼,已通過python3.6測試,可以成功運(yùn)行:
對于所要爬取的網(wǎng)頁連接可以通過王者榮耀官網(wǎng)找到,
# -*- coding: utf-8 -*- """ Created on Wed Dec 13 13:49:52 2017 @author:KillerTwo """ import requests import os hero_list_url = 'http://pvp.qq.com/web201605/js/herolist.json' hero_skin_root_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' skin_base_dir = 'C:\\Users\\lwt27\\Pictures\\image\\heroskin\\' def get_ename(hero_json):#傳入獲取到的python對象,如hero_list_json '''獲取英雄名稱對應(yīng)英雄編號的一個字典,例如{小喬:106,...}''' cname_ename = {} for hero in hero_json: cname_ename[hero['cname']] = hero['ename'] return cname_ename def get_skin_name(hero_json): #傳入從網(wǎng)頁獲取到的json轉(zhuǎn)換為python字典的對象 '''獲取英雄名稱對應(yīng)的皮膚的所有皮膚名稱的字典,例如 {'小喬':'戀之微風(fēng)|萬圣前夜|天鵝之夢|純白花嫁|繽紛獨(dú)角獸',...}''' cname_skin_name = {} for hero in hero_json: cname_skin_name[hero['cname']] = hero['skin_name'] return cname_skin_name def get_hero_skin_count(cname_skin_name): #傳入英雄名稱對應(yīng)皮膚名稱的字典 '''獲取每個英雄對應(yīng)的皮膚的個數(shù),例如{'小喬':5,...}''' cname_skin_count = {} for item in cname_skin_name.items(): cname_skin_count[item[0]] = len(item[1].split('|')) return cname_skin_count def get_skin_name_url(skin_base_rul,cname_skin_count,cname_ename): #傳入皮膚根地址和名稱對應(yīng)皮膚數(shù)量的字典和名稱對應(yīng)編號的字典 '''返回英雄名稱對應(yīng)的所有皮膚的url地址列表的字典,例如{小喬:[skin_url1,skin_url2],...}''' cname_url_list = {} for cname,count in cname_skin_count.items(): #print(cname) #print(count) #print(skin_base_rul) #print(cname_ename[cname]) base_url = skin_base_rul+str(cname_ename[cname])+'/'+str(cname_ename[cname])+'-bigskin-' #print(base_url) skin_url_list = [str(base_url)+str(num)+'.jpg' for num in range(1,count+1)] cname_url_list[cname] = skin_url_list return cname_url_list #print() d = get_skin_name_url(hero_skin_root_url,get_hero_skin_count(get_skin_name(hero_list_json)),get_ename(hero_list_json)) #print(d) def get_cname_skin_name(cname_skin_name):#傳入名稱對應(yīng)皮膚名稱字符串的字典 cname_skin_name_dict = {} #返回名稱對應(yīng)【皮膚名稱的列表】的字典 for cname,skin_name_list in cname_skin_name.items(): skin_list = [name for name in skin_name_list.split('|')] cname_skin_name_dict[cname] = skin_list return cname_skin_name_dict #s = get_skin_name(hero_list_json) #print(s) #f = get_cname_skin_name(s) #print(f) def get_hero_skin(cname_url_list,cname_skin_name):#傳入名稱對應(yīng)【皮膚名稱列表】的字典和名稱對應(yīng)皮膚url列表的字典 # """獲取每個英雄的圖片""" for cname,skin_url in cname_url_list.items(): if mkdir(skin_base_dir+cname):#創(chuàng)建指定目錄 os.chdir(skin_base_dir+cname) #進(jìn)入到創(chuàng)建的目錄 for i in range(len(skin_url)): file_name = cname_skin_name[cname][i]+'.jpg' r = requests.get(skin_url[i]) with open(file_name,'wb') as f: f.write(r.content) #創(chuàng)建目錄 def mkdir(path): # 引入模塊 import os # 去除首位空格 path=path.strip() # 去除尾部 \ 符號 path=path.rstrip("\\") # 判斷路徑是否存在 # 存在 True # 不存在 False isExists=os.path.exists(path) # 判斷結(jié)果 if not isExists: # 如果不存在則創(chuàng)建目錄 # 創(chuàng)建目錄操作函數(shù) os.makedirs(path) print(path+' 創(chuàng)建成功') return True else: # 如果目錄存在則不創(chuàng)建,并提示目錄已存在 print(path+' 目錄已存在') return False return if __name__ == '__main__': hero_list_body = requests.get(hero_list_url) #請求英雄列表 hero_list_json = hero_list_body.json() #將英雄列表的獲取的json數(shù)據(jù)轉(zhuǎn)換為python對象 cname_ename = {} #英雄名稱對應(yīng)英雄編號的字典 cname__skin_name = {} #英雄名稱對應(yīng)皮膚名稱字符串的字典 cname_skin_count = {} #英雄名稱對應(yīng)皮膚數(shù)量的字典 cname_skin_name_str_list = get_skin_name(hero_list_json) cname_skin_name_list = get_cname_skin_name(cname_skin_name_str_list) cname_skin_count = get_hero_skin_count(cname_skin_name_str_list) cname_ename = get_ename(hero_list_json) cnam_skin_url_list = get_skin_name_url(hero_skin_root_url,cname_skin_count,cname_ename) get_hero_skin(cnam_skin_url_list,cname_skin_name_list)
下面是保存抓取到的圖片的文件夾樣例:
上面就是抓取王者榮耀所有英雄皮膚的簡單示例,上述的代碼并沒有使用python多線程執(zhí)行抓取圖片的函數(shù),所以在執(zhí)行的時候可能需要花費(fèi)幾分鐘的時間,
以后在進(jìn)行改進(jìn),添加使用python多線程執(zhí)行抓取任務(wù)。
這篇用python的requests第三方模塊抓取王者榮耀所有英雄的皮膚實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python配置文件管理之ini和yaml文件讀取的實(shí)現(xiàn)
本文主要介紹了Python配置文件管理之ini和yaml文件讀取,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02opencv實(shí)現(xiàn)靜態(tài)手勢識別 opencv實(shí)現(xiàn)剪刀石頭布游戲
這篇文章主要為大家詳細(xì)介紹了opencv實(shí)現(xiàn)靜態(tài)手勢識別,opencv實(shí)現(xiàn)剪刀石頭布游戲,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01Python打印詳細(xì)報錯日志,獲取報錯信息位置行數(shù)方式
這篇文章主要介紹了Python打印詳細(xì)報錯日志,獲取報錯信息位置行數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09python區(qū)塊鏈簡易版交易實(shí)現(xiàn)示例
這篇文章主要為大家介紹了python區(qū)塊鏈簡易版交易實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05淺談pytorch中torch.max和F.softmax函數(shù)的維度解釋
這篇文章主要介紹了淺談pytorch中torch.max和F.softmax函數(shù)的維度解釋,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06利用Python中SocketServer 實(shí)現(xiàn)客戶端與服務(wù)器間非阻塞通信
本文主要介紹了利用Python中SocketServer 實(shí)現(xiàn)客戶端與服務(wù)器間非阻塞通信示例代碼,具有很好的參考價值,需要的朋友一起來看下吧2016-12-12何用Python實(shí)現(xiàn)一個 “系統(tǒng)聲音” 的實(shí)時律動掛件
這篇文章將給大家介紹了如何用 Python 實(shí)現(xiàn)一個 “系統(tǒng)聲音” 的實(shí)時律動掛件,采集后直接實(shí)時地在電腦上繪制波形動畫,主要是用來作為 FL Studio 播放時的一個桌面小掛件,文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下2024-01-01ORM Django 終端打印 SQL 語句實(shí)現(xiàn)解析
這篇文章主要介紹了ORM Django 終端打印 SQL 語句實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08Opencv中的cv2.calcHist()函數(shù)的作用及返回值說明
這篇文章主要介紹了Opencv中的cv2.calcHist()函數(shù)的作用及返回值說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11