用python的requests第三方模塊抓取王者榮耀所有英雄的皮膚實(shí)例
本文使用python的第三方模塊requests爬取王者榮耀所有英雄的圖片,并將圖片按每個(gè)英雄為一個(gè)目錄存入文件夾中,方便用作桌面壁紙
下面時(shí)具體的代碼,已通過(guò)python3.6測(cè)試,可以成功運(yùn)行:
對(duì)于所要爬取的網(wǎng)頁(yè)連接可以通過(guò)王者榮耀官網(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對(duì)象,如hero_list_json
'''獲取英雄名稱(chēng)對(duì)應(yīng)英雄編號(hào)的一個(gè)字典,例如{小喬: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)頁(yè)獲取到的json轉(zhuǎn)換為python字典的對(duì)象
'''獲取英雄名稱(chēng)對(duì)應(yīng)的皮膚的所有皮膚名稱(chēng)的字典,例如
{'小喬':'戀之微風(fēng)|萬(wàn)圣前夜|天鵝之夢(mè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): #傳入英雄名稱(chēng)對(duì)應(yīng)皮膚名稱(chēng)的字典
'''獲取每個(gè)英雄對(duì)應(yīng)的皮膚的個(gè)數(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):
#傳入皮膚根地址和名稱(chēng)對(duì)應(yīng)皮膚數(shù)量的字典和名稱(chēng)對(duì)應(yīng)編號(hào)的字典
'''返回英雄名稱(chēng)對(duì)應(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):#傳入名稱(chēng)對(duì)應(yīng)皮膚名稱(chēng)字符串的字典
cname_skin_name_dict = {} #返回名稱(chēng)對(duì)應(yīng)【皮膚名稱(chē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):#傳入名稱(chēng)對(duì)應(yīng)【皮膚名稱(chēng)列表】的字典和名稱(chēng)對(duì)應(yīng)皮膚url列表的字典
# """獲取每個(gè)英雄的圖片"""
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()
# 去除尾部 \ 符號(hào)
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) #請(qǐng)求英雄列表
hero_list_json = hero_list_body.json() #將英雄列表的獲取的json數(shù)據(jù)轉(zhuǎn)換為python對(duì)象
cname_ename = {} #英雄名稱(chēng)對(duì)應(yīng)英雄編號(hào)的字典
cname__skin_name = {} #英雄名稱(chēng)對(duì)應(yīng)皮膚名稱(chēng)字符串的字典
cname_skin_count = {} #英雄名稱(chēng)對(duì)應(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)
下面是保存抓取到的圖片的文件夾樣例:

上面就是抓取王者榮耀所有英雄皮膚的簡(jiǎn)單示例,上述的代碼并沒(méi)有使用python多線程執(zhí)行抓取圖片的函數(shù),所以在執(zhí)行的時(shí)候可能需要花費(fèi)幾分鐘的時(shí)間,
以后在進(jìn)行改進(jìn),添加使用python多線程執(zhí)行抓取任務(wù)。
這篇用python的requests第三方模塊抓取王者榮耀所有英雄的皮膚實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python操控Chrome瀏覽器進(jìn)行網(wǎng)頁(yè)操作
這篇文章將為您展示如何通過(guò)Python控制瀏覽器實(shí)現(xiàn)網(wǎng)頁(yè)的打開(kāi)、頁(yè)面的切換和關(guān)閉的基本操作,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-06-06
使用Django的JsonResponse返回?cái)?shù)據(jù)的實(shí)現(xiàn)
這篇文章主要介紹了使用Django的JsonResponse返回?cái)?shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
Python實(shí)現(xiàn)獲取網(wǎng)站PR及百度權(quán)重
這篇文章主要介紹了Python實(shí)現(xiàn)獲取網(wǎng)站PR及百度權(quán)重,本文使用傳參的方式請(qǐng)求站長(zhǎng)工具和谷歌工具獲取PR值和百度權(quán)重,需要的朋友可以參考下2015-01-01
pytorch使用resnet快速加載官方提供的預(yù)訓(xùn)練模型
這篇文章主要介紹了pytorch使用resnet快速加載官方提供的預(yù)訓(xùn)練模型方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
python實(shí)現(xiàn)excel轉(zhuǎn)置問(wèn)題詳解
這篇文章主要介紹了python實(shí)現(xiàn)excel轉(zhuǎn)置問(wèn)題詳解,excel轉(zhuǎn)置分為兩種情況,一個(gè)是較為簡(jiǎn)單的只需要行轉(zhuǎn)列,列轉(zhuǎn)行,具體詳解,感興趣的小伙伴可以參考一下2022-09-09
python manim實(shí)現(xiàn)排序算法動(dòng)畫(huà)示例
這篇文章主要為大家介紹了python manim實(shí)現(xiàn)排序算法動(dòng)畫(huà)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08

