屁話不多說(shuō)[滑稽]爬取皮膚本身并不難,難點(diǎn)在于分析,我們首先得得到皮膚圖片的url地址,話不多說(shuō),我們馬上來(lái)到王者榮耀的官網(wǎng):

文章插圖
我們點(diǎn)擊英雄資料,然后隨意地選擇一位英雄,接著F12打開(kāi)調(diào)試臺(tái),找到英雄原皮膚的圖片地址:

文章插圖
接著,我們切換一下英雄的皮膚,會(huì)發(fā)現(xiàn)圖片地址沒(méi)有明顯的變化,只是最后的數(shù)字序號(hào)改變了,我們將兩個(gè)皮膚圖片的地址放在一起比較一下:我們將兩個(gè)皮膚圖片的地址放在一起比較一下:一.http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/523/523-bigskin-1.jpg二.http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/523/523-bigskin-2.jpg我們可以猜測(cè),對(duì)于同一個(gè)英雄的皮膚圖片地址,僅僅是最后的數(shù)字序號(hào)不同,為了證實(shí)我們的猜想,我們可以繼續(xù)找出一個(gè)英雄的全皮膚圖片,找一個(gè)皮膚多一點(diǎn)的,例如我這里找的是孫尚香,將它的所有皮膚圖片地址放在一起比較:http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-1.jpghttp://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-2.jpghttp://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-3.jpghttp://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-4.jpghttp://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-5.jpghttp://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-6.jpghttp://game.gtimg.cn/images/yxzj/img2由此我們得出結(jié)論,同一個(gè)英雄的皮膚圖片路徑從1開(kāi)始依次遞增,我們?cè)賮?lái)看看不同英雄之間是如何區(qū)分的 。會(huì)發(fā)現(xiàn),不管皮膚圖片如何改變,瀏覽器上方的地址始終是不變的,所以我們將兩個(gè)不同英雄的url地址放到一起比較一下:https://pvp.qq.com/web201605/herodetail/523.shtmlhttps://pvp.qq.com/web201605/herodetail/111.shtml乍一看,似乎沒(méi)有什么規(guī)律,但我們要從這里發(fā)現(xiàn)一點(diǎn),就是最后的數(shù)字其實(shí)控制的是哪個(gè)英雄,我們暫且認(rèn)為它是英雄的編號(hào),可不幸的是,英雄編號(hào)之間好像沒(méi)有什么規(guī)律,不用著急,我們?cè)俚焦倬W(wǎng)上找找線索 。在英雄資料界面,我們打開(kāi)F12調(diào)試臺(tái),通過(guò)抓取網(wǎng)絡(luò)請(qǐng)求,我發(fā)現(xiàn)了幾個(gè)文件:

文章插圖
點(diǎn)擊網(wǎng)絡(luò),然后點(diǎn)擊XHR,就可以看到這幾個(gè)文件,看到文件的名字大家應(yīng)該就清楚了,這些文件存儲(chǔ)的就是英雄列表信息,我們點(diǎn)擊查看一下:

文章插圖
沒(méi)錯(cuò),這里存儲(chǔ)的就是英雄信息,包括英雄的名字,英雄編號(hào)等等其它信息,我們可以試試這些信息的準(zhǔn)確性,例如小喬的ename,也就是英雄編號(hào)為106,所以按照之前的想法,英雄小喬的詳情地址應(yīng)為:https://pvp.qq.com/web201605/herodetail/106.shtml經(jīng)過(guò)嘗試后發(fā)現(xiàn)確實(shí)如此 。到這里,準(zhǔn)備工作就完成了,其實(shí)進(jìn)行到這里,整個(gè)工程就完成了一半了,接下來(lái)就是代碼的實(shí)現(xiàn)了 。代碼實(shí)現(xiàn):首先我們創(chuàng)建一個(gè)Python文件,然后導(dǎo)入os和requests模塊 。按照前面的步驟,我們首先需要獲取到英雄列表信息,也就是herolist.json文件,文件地址為:https://pvp.qq.com/web201605/js/herolist.json,這在調(diào)試臺(tái)中可以找到 。那么我們首先就要通過(guò)這個(gè)地址獲取到英雄列表信息的json數(shù)據(jù),然后解析json數(shù)據(jù),將有用的信息提取出來(lái):url = 'https://pvp.qq.com/web201605/js/herolist.json'herolist = requests.get(url)# 獲取英雄列表json文件herolist_json = herolist.json()# 轉(zhuǎn)化為json格式hero_name = list(map(lambda x: x['cname'], herolist.json()))# 提取英雄的名字hero_number = list(map(lambda x: x['ename'], herolist.json()))# 提取英雄的編號(hào)這樣我們就獲取到了英雄名字和編號(hào),可以輸出測(cè)試一下:拿到了英雄編號(hào)之后,事情就變得很簡(jiǎn)單了,只需拼接一下url地址即可:http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + hero_number + '/' + hero_number + '-bigskin-1.jpg,這樣可以獲取到所有英雄的皮膚圖片了,但是這里會(huì)有一個(gè)問(wèn)題,英雄的皮膚是有多有少的,有的英雄只有兩個(gè)皮膚,有的卻有六七個(gè),所以圖片編號(hào)的最大值我們并不清楚,這里我采用了一個(gè)比較笨的辦法,就是讓一個(gè)變量從1到10依次遞增去拼接圖片地址,如果遇到?jīng)]有的圖片我們就不處理,因?yàn)闆](méi)有一個(gè)英雄的皮膚超過(guò)了10個(gè),所以我們就能獲取到所有的圖片了 。下面看代碼實(shí)現(xiàn):# 下載圖片def downloadPic():i = 0for j in hero_number:# 創(chuàng)建文件夾os.mkdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])# 進(jìn)入創(chuàng)建好的文件夾os.chdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])i += 1for k in range(10):# 拼接urlonehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(j) + '-bigskin-' + str(k) + '.jpg'im = requests.get(onehero_link)# 請(qǐng)求urlif im.status_code == 200:open(str(k) + '.jpg', 'wb').write(im.content)# 寫(xiě)入文件實(shí)現(xiàn)非常地簡(jiǎn)單,代碼注釋也已經(jīng)寫(xiě)得很清楚了,有了這個(gè)函數(shù)之后,我們只需調(diào)用一下,就可以下載圖片了,整個(gè)程序的完整代碼如下:import osimport requestsurl = 'https://pvp.qq.com/web201605/js/herolist.json'herolist = requests.get(url)# 獲取英雄列表json文件herolist_json = herolist.json()# 轉(zhuǎn)化為json格式hero_name = list(map(lambda x: x['cname'], herolist.json()))# 提取英雄的名字hero_number = list(map(lambda x: x['ename'], herolist.json()))# 提取英雄的編號(hào)# 下載圖片def downloadPic():i = 0for j in hero_number:# 創(chuàng)建文件夾os.mkdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])# 進(jìn)入創(chuàng)建好的文件夾os.chdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])i += 1for k in range(10):# 拼接urlonehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(j) + '-bigskin-' + str(k) + '.jpg'im = requests.get(onehero_link)# 請(qǐng)求urlif im.status_code == 200:open(str(k) + '.jpg', 'wb').write(im.content)# 寫(xiě)入文件downloadPic()除去注釋?zhuān)咏?0行的代碼我們就完成了王者榮耀全英雄皮膚的爬取,是不是非常簡(jiǎn)單呢?我們可以測(cè)試一下這個(gè)程序,首先要在桌面上創(chuàng)建一個(gè)文件夾,名為wzry,因?yàn)檫@里的代碼我已經(jīng)寫(xiě)死了,如果要修改的話大家也可以進(jìn)行修改,文件夾創(chuàng)建完成后點(diǎn)擊運(yùn)行即可,等待片刻,圖片就全部下載完成了 。
相關(guān)經(jīng)驗(yàn)推薦
- 地下城割草攻略大全 新手入門(mén)少走彎路[多圖]
- s13賽季單排上分攻略 和平精英s13賽季單排怎么上分快
- 新手吃雞必備攻略 和平精英有哪些需要注意的小技巧
- 掛機(jī)修仙傳新手玩法攻略 掛機(jī)修仙傳新手開(kāi)局怎么玩
- 卡莎出裝推薦 lol手游2.2版本卡莎出裝
- 德萊文出裝介紹 LOL手游S2德萊文出裝攻略
- 夢(mèng)幻西游網(wǎng)頁(yè)版月老求賢之路怎么打?月老求賢之路通關(guān)圖文攻略[多圖]
- 【攻略】凝光角色攻略
- 【攻略】s1快樂(lè)極地
- 【攻略】常駐五星培養(yǎng)建議,有時(shí)候歪池子不一定是個(gè)壞事
