Python爬蟲之一:十幾行代碼下載王者榮耀224個皮膚

起因:前兩天在公眾號上看到一篇文章內(nèi)容就是爬取王者榮耀的皮膚切端,但是內(nèi)容太大概了鲸拥,如果跟著他做肯定做不出來珍逸,所以我打算自己做。

之前接觸過爬蟲還是幾年前爬取豆瓣電臺的歌曲禽额,那時候用的C++锯厢,json解析還要用第三方庫,總之很麻煩脯倒。最近接觸到了python实辑,深深的感覺這門語言真好。

進(jìn)入正題:如何爬取王者榮耀的英雄皮膚照片藻丢?

分為兩步:

  1. 找到皮膚圖片的地址
  2. 下載圖片

1. 尋找皮膚圖片地址

1.1 找到英雄列表

百度“王者榮耀”進(jìn)入官網(wǎng)剪撬,進(jìn)入https://pvp.qq.com/,按F12進(jìn)入調(diào)試界面郁岩,然后按F5刷新界面婿奔,圖中標(biāo)識的herolist.json文件就是我們所需要的英雄列表,其中包括英雄編號问慎、英雄名稱萍摊、英雄類型、皮膚的名稱等信息如叼,在文件上右擊復(fù)制鏈接http://pvp.qq.com/web201605/js/herolist.json

英雄列表.png

接下來檢驗一下我們的成果:

# 代碼片段1
import urllib.request
import json
import os

response = urllib.request.urlopen("http://pvp.qq.com/web201605/js/herolist.json")

hero_json = json.loads(response.read())
hero_num = len(hero_json)

print(hero_json)
print("hero_num : " , str(hero_num))

以上代碼讀取英雄列表存入hero_json冰木,并獲取英雄數(shù)量,運行效果如圖所示:

英雄列表運行結(jié)果.png

1.2 找到英雄皮膚地址

點擊首頁的“游戲資料”標(biāo)簽頁笼恰,進(jìn)入新的界面后點擊一個英雄頭像進(jìn)入英雄資料界面踊沸,此處我們以孫尚香為例:


游戲資料.png

孫尚香.png

同樣F12然后F5,將鼠標(biāo)在孫尚香幾個皮膚上依次掃過社证,來看看調(diào)試窗口


孫尚香皮膚.png

可以看到孫尚香的高清皮膚一共6個逼龟,同樣我們在第一個皮膚上右鍵復(fù)制鏈接得到:http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-1.jpg,這就是我們夢寐以求的英雄皮膚鏈接追葡。

分析一下這個鏈接腺律,其中“111”是英雄的編號,最后的“1”是該英雄的皮膚編號宜肉。到此為止匀钧,瀏覽器已經(jīng)沒有用了,該得到的信息我們都有了谬返。

2. 下載圖片

2.1 英雄有幾個皮膚

在第一步獲取到的herolist.json文件中有“skin_name”字段之斯,我們只要解析這個字段就可以獲取皮膚數(shù)量和皮膚名稱。測試代碼(接代碼片段1)如下:

  # 代碼片段2
  hero_name = hero_json[0]['cname']
  skin_names = hero_json[0]['skin_name'].split('|')
  skin_num = len(skin_names)
    
  print('hero_name: ', hero_name)
  print('skin_names :', skin_names)
  print('skin_num: ' + str(skin_num))

運行結(jié)果如下:

廉頗.png

可以看到廉頗一共兩個皮膚遣铝,皮膚名稱分別為:正義轟爆和地獄巖魂佑刷。

2.2 下載文件

下載文件用到urlretrieve接口莉擒,測試代碼如下:

for i in range(hero_num):
    # 獲取皮膚名稱列表
    skin_names = hero_json[i]['skin_name'].split('|')
    
    for cnt in range(len(skin_names)):
        save_file_name = 'D:\heroskin\\' + str(hero_json[i]['ename']) + '-' +hero_json[i]['cname']+ '-' +skin_names[cnt] + '.jpg'
        skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'+str(hero_json[i]['ename'])+ '/' +str(hero_json[i]['ename'])+'-bigskin-' + str(cnt+1) +'.jpg'
        urllib.request.urlretrieve(skin_url, save_file_name)

來看下結(jié)果:

皮膚.png

至此224個皮膚全部下載完畢,都是高清圖片项乒。

還沒有結(jié)束啰劲,程序有些不完美的地方:

  1. 如果路徑D:\herolist\不存在,則程序運行失斕春巍;
  2. 如果中途下載失敗廷支,再次運行程序的時候已經(jīng)下載過的圖片還會再下載一次频鉴。

解決方案:

  1. 檢查文件是否存在,如果不存在則創(chuàng)建恋拍,代碼如下:

    # 文件夾不存在則創(chuàng)建
    save_dir = 'D:\heroskin'
    if not os.path.exists(save_dir):
     os.mkdir(save_dir)
    
  2. 檢查文件是否存在垛孔,如果存在則跳過下載,代碼如下:

if not os.path.exists(save_file_name):
 urllib.request.urlretrieve(skin_url, save_file_name)

至此施敢,大功告成周荐,貼一下完整代碼:

# -*- coding: utf-8 -*-
"""
Created on Wed Aug 23 23:12:17 2017

@author: WangQiang
"""
import urllib.request
import json
import os

response = urllib.request.urlopen("http://pvp.qq.com/web201605/js/herolist.json")

hero_json = json.loads(response.read())
hero_num = len(hero_json)

# 文件夾不存在則創(chuàng)建
save_dir = 'D:\heroskin\\'
if not os.path.exists(save_dir):
    os.mkdir(save_dir)
    
for i in range(hero_num):
    # 獲取英雄皮膚列表
    skin_names = hero_json[i]['skin_name'].split('|')
    
    for cnt in range(len(skin_names)):
        save_file_name = save_dir + str(hero_json[i]['ename']) + '-' +hero_json[i]['cname']+ '-' +skin_names[cnt] + '.jpg'
        skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'+str(hero_json[i]['ename'])+ '/' +str(hero_json[i]['ename'])+'-bigskin-' + str(cnt+1) +'.jpg'

        if not os.path.exists(save_file_name):
            urllib.request.urlretrieve(skin_url, save_file_name)

除去注釋和空行,一共16行代碼實現(xiàn)了下載王者榮耀所有皮膚的功能僵娃,這些皮膚用來當(dāng)作桌面背景也是極好的8抛鳌!默怨!體驗一下:

桌面.png

微信公眾號
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讯榕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子匙睹,更是在濱河造成了極大的恐慌愚屁,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痕檬,死亡現(xiàn)場離奇詭異霎槐,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)梦谜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門丘跌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人改淑,你說我怎么就攤上這事碍岔。” “怎么了朵夏?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵蔼啦,是天一觀的道長。 經(jīng)常有香客問我仰猖,道長捏肢,這世上最難降的妖魔是什么奈籽? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮鸵赫,結(jié)果婚禮上衣屏,老公的妹妹穿的比我還像新娘。我一直安慰自己辩棒,他們只是感情好狼忱,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著一睁,像睡著了一般钻弄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上者吁,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天窘俺,我揣著相機(jī)與錄音,去河邊找鬼复凳。 笑死瘤泪,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的育八。 我是一名探鬼主播对途,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼单鹿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起仲锄,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤儒喊,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后侨颈,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哈垢,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡耘分,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年求泰,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芽丹。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡卜朗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出楼肪,到底是詐尸還是另有隱情,我是刑警寧澤肩钠,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布价匠,位于F島的核電站踩窖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏箫柳。R本人自食惡果不足惜啥供,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一伙狐、第九天 我趴在偏房一處隱蔽的房頂上張望贷屎。 院中可真熱鬧,春花似錦咒吐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽绪励。三九已至疏魏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間大莫,已是汗流浹背只厘。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工羔味, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忘蟹。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓搁凸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親坪仇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容