手把手教你使用Python網(wǎng)絡(luò)爬蟲(chóng)獲取王者榮耀英雄皮膚
回復(fù)“書(shū)籍”即可獲贈(zèng)Python從入門(mén)到進(jìn)階共10本電子書(shū)
/1 前言/
????王者榮耀,想必大家都玩過(guò)或聽(tīng)過(guò),游戲里中各式各樣的英雄,每款皮膚都非常精美,用做電腦壁紙?jiān)俸线m不過(guò)了。今天來(lái)教大家如何使用Python來(lái)爬取這些精美的英雄皮膚。
/2 項(xiàng)目目標(biāo)/
??? 創(chuàng)建一個(gè)文件夾, 英雄分類保存所有皮膚圖片。下載成功結(jié)果顯示控制臺(tái)。
/3?項(xiàng)目準(zhǔn)備/
軟件:PyCharm
需要的庫(kù):requests、lxml、fake_useragent、json、os
網(wǎng)站如下:
https://www.555x.org/html/wuxiaxianxia/list_29_{}.html/4 項(xiàng)目分析/
1、首先打開(kāi)王者榮耀官網(wǎng),點(diǎn)擊英雄資料。

2、F12右鍵檢查,點(diǎn)擊英雄鏈接。

3、多點(diǎn)幾個(gè)英雄鏈接看看網(wǎng)址規(guī)律。
herodetail/531.shtmlherodetail/523.shtmlherodetail/199.shtml
發(fā)現(xiàn)只有后面的數(shù)字在變化,最后的數(shù)字應(yīng)該是控制的是哪個(gè)英雄,我們暫且認(rèn)為它是英雄的編號(hào)。
4、按下F5刷新頁(yè)面,點(diǎn)擊network,找到herolist .json。(亂碼沒(méi)關(guān)系把herolist .json下載下來(lái)觀察)如圖:



看到ename,就是對(duì)應(yīng)網(wǎng)址后綴英雄的名稱。而cname是對(duì)應(yīng)英雄的名稱。skin_name對(duì)應(yīng)皮膚的名字。
5、點(diǎn)擊英雄鏈接。觀察圖片地址的變化。

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/107/107-bigskin-1.jpghttp://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/107/107-bigskin-2.jpghttp://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/107/107-bigskin-3.jpghttp://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/107/107-bigskin-4.jpghttp://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/107/107-bigskin-5.jpghttp://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/107/107-bigskin-6.jpghttp://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/107/107-bigskin-7.jpg
6、觀察到同一個(gè)英雄的皮膚圖片路徑從1開(kāi)始依次遞增,我們?cè)賮?lái)看看不同英雄之間是如何區(qū)分的。會(huì)發(fā)現(xiàn),107/107-這個(gè)英雄的編號(hào)不一樣,獲取到的圖片就不一樣。決定的是ename。
7、我們可以用字符串拼接的方式進(jìn)行訪問(wèn)。
https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{}/{}-bigskin-{}.jpg/5?項(xiàng)目實(shí)現(xiàn)/
1、定義一個(gè)class類繼承object,定義init方法繼承self,主函數(shù)main繼承self。導(dǎo)入需要的庫(kù)和網(wǎng)址,并創(chuàng)建保存文件夾,代碼如下所示。
import requests, json, osfrom lxml import etreefrom fake_useragent import UserAgentclass wzry(object):def __init__(self):os.mkdir("王者") # 創(chuàng)建王者榮耀這個(gè)文件夾 記住只有第一次運(yùn)行加上,如果多次運(yùn)行請(qǐng)注釋掉本行def main(self):passif __name__ == '__main__':Siper=wzry()Siper.main()
2、創(chuàng)建wzry方法(),主方法(main)實(shí)現(xiàn) ,對(duì)herolist .json 進(jìn)行json解析。
def wzry(self):response = requests.get('https://pvp.qq.com/web201605/js/herolist.json', headers=self.headers)content = response.text # 這里后獲取的是json數(shù)據(jù)類型需要 轉(zhuǎn)換成Python對(duì)應(yīng)類型data = json.loads(content)def main(self):self,wzry()
3、for遍歷data獲取需要的字段。創(chuàng)建對(duì)應(yīng)的英雄文件夾。
for i in data:hero_number = i['ename'] # 獲取英雄名字編號(hào)hero_name = i['cname'] # 獲取英雄名字os.mkdir("././王者榮耀/{}".format(hero_name)) # 創(chuàng)建英雄對(duì)應(yīng)的文件夾
4、對(duì)英雄界面發(fā)生請(qǐng)求,利用xpath解析數(shù)據(jù),代碼如下。
response_src = requests.get("https://pvp.qq.com/web201605/herodetail/{}.shtml".format(hero_number),headers=self.headers)hero_content = response_src.content.decode('gbk') # 返回相應(yīng)的html頁(yè)面hero_data = etree.HTML(hero_content) # xpath解析對(duì)象hero_img = hero_data.xpath('//div[@class="pic-pf"]/ul/@data-imgname') # 提取每個(gè)英雄的皮膚名字hero_src = hero_img[0].split('|') # 去掉每個(gè)皮膚名字中間的分隔符
5、遍歷英雄src處理圖片名稱。
for i in range(len(hero_src)):i_num = hero_src[i].find("&")skin_name = hero_src[i][:i_num]#print(skin_name)# 皮膚圖片地址請(qǐng)求
6、圖片地址請(qǐng)求。
response_skin = requests.get("https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{}/{}-bigskin-{}.jpg".format(hero_number, hero_number, i + 1))skin_img = response_skin.content # 獲取每個(gè)皮膚圖片
7、?把皮膚圖片存儲(chǔ)到對(duì)應(yīng)名字的文件里,成功顯示控制臺(tái)。
with open("./王者榮耀/{}/{}.jpg".format(hero_name, skin_name), "wb")as f:f.write(skin_img) # 把皮膚圖片存儲(chǔ)到對(duì)應(yīng)名字的文件里print("%s.jpg 下載成功!!" % (skin_name))
/6?效果展示/
1、點(diǎn)擊綠色小三角運(yùn)行。需要注意的是創(chuàng)建王者榮耀這個(gè)文件夾,記住只有第一次運(yùn)行加上。

2、運(yùn)行程序后,結(jié)果顯示在控制臺(tái),如下圖所示。

3、英雄分類列表。

4、雙擊文件,即可展示。

/7 小結(jié)/
-------------------?薦書(shū)?-------------------
《Python數(shù)據(jù)分析》這本書(shū)主要圍繞整個(gè)數(shù)據(jù)分析方法論的常規(guī)流程,介紹了Python常用的工具包,包括科學(xué)計(jì)算庫(kù)Numpy、數(shù)據(jù)分析庫(kù)Pandas、數(shù)據(jù)挖掘庫(kù)Scikit-Learn,以及數(shù)據(jù)可視化庫(kù)Matplotlib和Seaborn的基本知識(shí),并從數(shù)據(jù)分析挖掘的實(shí)際業(yè)務(wù)應(yīng)用出發(fā),講解了互聯(lián)網(wǎng)、金融及零售等行業(yè)的真實(shí)案例,比如客戶分群、產(chǎn)品精準(zhǔn)營(yíng)銷(xiāo)、房?jī)r(jià)預(yù)測(cè)、特征降維等,深入淺出、循序漸進(jìn)地介紹了Python數(shù)據(jù)分析的全過(guò)程。?

本書(shū)內(nèi)容精煉、重點(diǎn)突出、案例豐富,適合在企業(yè)中從事數(shù)據(jù)分析、數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)等工作的人員學(xué)習(xí)使用,同樣適合想從事數(shù)據(jù)分析挖掘工作的各大中專院校的學(xué)生與教師,以及其他對(duì)數(shù)據(jù)分析挖掘技術(shù)領(lǐng)域有興趣愛(ài)好的各類人員。
-------------------?End?-------------------
往期精彩文章推薦:
手把手用Python教你如何發(fā)現(xiàn)隱藏wifi
手把手教你用Python做個(gè)可視化的“剪刀石頭布”小游戲
Python基礎(chǔ)語(yǔ)法——代碼規(guī)范&判斷語(yǔ)句&循環(huán)語(yǔ)句

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬(wàn)水千山總是情,點(diǎn)個(gè)【在看】行不行
/今日留言主題/
隨便說(shuō)一兩句吧~~
