起因:前两天在公众号上看到一篇文章内容就是爬取王者荣耀的皮肤,但是内容太大概了,如果跟着他做肯定做不出来,所以我打算自己做。

之前接触过爬虫还是几年前爬取豆瓣电台的歌曲,那时候用的C++,json解析还要用第三方库,总之很麻烦。最近接触到了python,深深的感觉这门语言真好。

进入正题:如何爬取王者荣耀的英雄皮肤照片?分为两步:

  1. 找到皮肤图片的地址
  2. 下载图片

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个皮肤全部下载完毕,都是高清图片。

还没有结束,程序有些不完美的地方:

  1. 如果路径D:\herolist\不存在,则程序运行失败;
  2. 如果中途下载失败,再次运行程序的时候已经下载过的图片还会再下载一次。

解决方案:

  1. 检查文件是否存在,如果不存在则创建,代码如下:
# 文件夹不存在则创建
save_dir = 'D:\heroskin'
if not os.path.exists(save_dir):os.mkdir(save_dir)
  1. 检查文件是否存在,如果存在则跳过下载,代码如下:

    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爬虫之一:十几行代码下载王者荣耀所有皮肤相关推荐

  1. python玩王者荣耀皮肤_Python爬虫:十几行代码下载王者荣耀所有皮肤

    访问,一键创建你的人工智能项目作者 | 王强 来源 | C与Python实战 起因:前两天在公众号上看到一篇文章内容就是爬取王者荣耀的皮肤,但是内容太大概了,如果跟着他做肯定做不出来,所以我打算自己做 ...

  2. Python爬虫下载王者荣耀全皮肤

    python爬虫下载王者荣耀全皮肤 import requests import os from time import timestart = time() headers = {'User-Age ...

  3. python 山脊图_爬虫:带你一键爬取王者荣耀英雄皮肤壁纸

    一.前言 王者荣耀这款手游,想必大家都玩过或听过,游戏里英雄有各式各样的皮肤,制作得很精美,有些拿来做电脑壁纸它不香吗.本文带你利用Python爬虫一键下载王者荣耀英雄皮肤壁纸. 1. 目标 创建一个 ...

  4. 图片链接用src不能被爬虫爬到吗_爬虫:带你一键爬取王者荣耀英雄皮肤壁纸

    一.前言 王者荣耀这款手游,想必大家都玩过或听过,游戏里英雄有各式各样的皮肤,制作得很精美,有些拿来做电脑壁纸它不香吗.本文带你利用Python爬虫一键下载王者荣耀英雄皮肤壁纸. 1. 目标 创建一个 ...

  5. 爬虫python代码-Python爬虫入门(01) -- 10行代码实现一个爬虫

    跟我学习Python爬虫系列开始啦.带你简单快速高效学习Python爬虫. 一.快速体验一个简单爬虫 以抓取简书首页文章标题和链接为例 简书首页 就是以上红色框内文章的标签,和这个标题对应的url链接 ...

  6. 爬虫python代码-Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

  7. Python 爬虫进阶篇-4行代码实现爬取指定网站中的全部图片实例演示及原理剖析

    上一篇:Python 爬虫入门篇-如何获取网页中的图片.我们了解到了 urllib 获取图片的原理,urllib.request.urlretrieve() 就是用来获取图片的. 这一篇,我们用正则表 ...

  8. python爬虫代码-Python爬虫入门(01) -- 10行代码实现一个爬虫

    跟我学习Python爬虫系列开始啦.带你简单快速高效学习Python爬虫. 一.快速体验一个简单爬虫 以抓取简书首页文章标题和链接为例 简书首页 就是以上红色框内文章的标签,和这个标题对应的url链接 ...

  9. python爬虫代码-Python爬虫教程:200行代码实现一个滑动验证码

    Python爬虫教程:教你用200行代码实现一个滑动验证码 做网络爬虫的同学肯定见过各种各样的验证码,比较高级的有滑动.点选等样式,看起来好像挺复杂的,但实际上它们的核心原理还是还是很清晰的,本文章大 ...

  10. 复制部分网页源代码到本地HTML文件,使用Python ==> pqQuery库 导入本地html文件,实现6行代码输出王者荣耀所有人物角色姓名

    前言:本次使用Google浏览器测试(不同浏览器会有些许差异,但是逻辑相通) 1.打开 英雄资料列表页-英雄介绍-王者荣耀官方网站-腾讯游戏 :https://pvp.qq.com/web201605 ...

最新文章

  1. 《初级前端开发人员经常容易忽视几个细节问题汇总》
  2. 多个线程访问共享对象和数据的方式
  3. 我对XCode Objective-c Cocoa的简单理解
  4. PopupWindow和AlertDialog区别
  5. ajax与DOM的使用,AJAX和DOM的运行经验
  6. 程序员求助:腾讯面试题,64匹马8个跑道,多少轮选出最快的四匹
  7. HOUR 4 Expressions, Statements, and Operators
  8. 汉字字符内码查询_计算机等级考试查询系统
  9. 【教程New】IDM安装使用教程--便捷下载网页视频的好方法
  10. python通讯录课程设计
  11. Linux计划任务写入保存命令
  12. SAP 云平台 (Cloud Platform) 架构概述
  13. android代码让手机降温,手机降温神器下载 手机一键降温神器 for Android v1.0.1 安卓版 下载-脚本之家...
  14. matlab采样率为100hz,matlab自己设计一个低通滤波器,要求滤出100Hz之外的频率,采样率为10000Hz...
  15. Bootstrap DataTable自定义表格 设置某列不排序
  16. 怎样获得淘宝/天猫淘口令真实url
  17. K210应用2-使用GPIO控制LED状态
  18. 亚马逊AWS·优维科技EASYOPS企业云计算研讨会 邀请函
  19. python3 将科学计数法(用E表示的)转化为书写形式的科学计数法的数字
  20. Python-励志公式

热门文章

  1. 阿里云怎么进入mysql_阿里云进入mysql数据库
  2. [深入研究4G/5G/6G专题-35]: URLLC-6-《中国联通5G URLLC技术白皮书3.0版本》解读-2-无线侧关键技术
  3. 分享个B端竞品分析报告
  4. redis开发与运维笔记
  5. lammps基础教程:Ovito标记原子内部运动方法介绍
  6. 手把手教你使用si9000计算高速差分线的阻抗
  7. 九型人格,工作中的好帮手
  8. 简单图片隐写术练习题
  9. X86工控机虚拟显示器设置(nomachine远程桌面)
  10. 【springboot】自动整合Tomcat原理