Python爬虫之一:十几行代码下载王者荣耀所有皮肤
起因:前兩天在公眾號上看到一篇文章內容就是爬取王者榮耀的皮膚,但是內容太大概了,如果跟著他做肯定做不出來,所以我打算自己做。
之前接觸過爬蟲還是幾年前爬取豆瓣電臺的歌曲,那時候用的C++,json解析還要用第三方庫,總之很麻煩。最近接觸到了python,深深的感覺這門語言真好。
進入正題:如何爬取王者榮耀的英雄皮膚照片?分為兩步:
1. 尋找皮膚圖片地址
1.1 找到英雄列表
百度“王者榮耀”進入官網,進入https://pvp.qq.com/,按F12進入調試界面,然后按F5刷新界面,圖中標識的herolist.json文件就是我們所需要的英雄列表,其中包括英雄編號、英雄名稱、英雄類型、皮膚的名稱等信息,在文件上右擊復制鏈接http://pvp.qq.com/web201605/js/herolist.json
接下來檢驗一下我們的成果:
# 代碼片段1 import urllib.request import json import osresponse = 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,并獲取英雄數量,運行效果如圖所示:
1.2 找到英雄皮膚地址
點擊首頁的“游戲資料”標簽頁,進入新的界面后點擊一個英雄頭像進入英雄資料界面,此處我們以孫尚香為例:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-SosrUTm7-1655781460104)(https://image-bed-1254282033.cos.ap-beijing.myqcloud.com/img/%E6%B8%B8%E6%88%8F%E8%B5%84%E6%96%99.png)]
同樣F12然后F5,將鼠標在孫尚香幾個皮膚上依次掃過,來看看調試窗口
可以看到孫尚香的高清皮膚一共6個,同樣我們在第一個皮膚上右鍵復制鏈接得到:http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-1.jpg,這就是我們夢寐以求的英雄皮膚鏈接。
分析一下這個鏈接,其中“111”是英雄的編號,最后的“1”是該英雄的皮膚編號。到此位置,瀏覽器已經沒有用了,該得到的信息我們都有了。
2. 下載圖片
2.1 英雄有幾個皮膚
在第一步獲取到的herolist.json文件中有**“skin_name”**字段,我們只要解析這個字段就可以獲取皮膚數量和皮膚名稱。測試代碼(接代碼片段1)如下:
# 代碼片段2hero_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))運行結果如下:
可以看到廉頗一共兩個皮膚,皮膚名稱分別為:爭議轟爆和地獄巖魂。
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)來看下結果:
至此224個皮膚全部下載完畢,都是高清圖片。
還沒有結束,程序有些不完美的地方:
解決方案:
檢查文件是否存在,如果存在則跳過下載,代碼如下:
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 osresponse = urllib.request.urlopen("http://pvp.qq.com/web201605/js/herolist.json")hero_json = json.loads(response.read()) hero_num = len(hero_json)# 文件夾不存在則創建 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行代碼實現了下載王者榮耀所有皮膚的功能,這些皮膚用來當作桌面背景也是極好的!!!體驗一下:
總結
以上是生活随笔為你收集整理的Python爬虫之一:十几行代码下载王者荣耀所有皮肤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python图书管理实训报告总结_图书管
- 下一篇: 【机器人算法】机器人运动学参数辨识/DH