用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例


Posted in Python onDecember 14, 2017

本文使用python的第三方模块requests爬取王者荣耀所有英雄的图片,并将图片按每个英雄为一个目录存入文件夹中,方便用作桌面壁纸

下面时具体的代码,已通过python3.6测试,可以成功运行:

对于所要爬取的网页连接可以通过王者荣耀官网找到,

# -*- coding: utf-8 -*-
"""
Created on Wed Dec 13 13:49:52 2017
@author:KillerTwo
"""
import requests
import os
hero_list_url = 'http://pvp.qq.com/web201605/js/herolist.json'
hero_skin_root_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'
skin_base_dir = 'C:\\Users\\lwt27\\Pictures\\image\\heroskin\\'

def get_ename(hero_json):#传入获取到的python对象,如hero_list_json
 '''获取英雄名称对应英雄编号的一个字典,例如{小乔:106,...}'''
 cname_ename = {}
 for hero in hero_json:
 cname_ename[hero['cname']] = hero['ename']
 return cname_ename
def get_skin_name(hero_json): #传入从网页获取到的json转换为python字典的对象
 '''获取英雄名称对应的皮肤的所有皮肤名称的字典,例如
 {'小乔':'恋之微风|万圣前夜|天鹅之梦|纯白花嫁|缤纷独角兽',...}'''
 cname_skin_name = {}
 for hero in hero_json:
 cname_skin_name[hero['cname']] = hero['skin_name']
 return cname_skin_name
def get_hero_skin_count(cname_skin_name): #传入英雄名称对应皮肤名称的字典
 '''获取每个英雄对应的皮肤的个数,例如{'小乔':5,...}'''
 cname_skin_count = {} 
 for item in cname_skin_name.items():
 cname_skin_count[item[0]] = len(item[1].split('|'))
 return cname_skin_count
def get_skin_name_url(skin_base_rul,cname_skin_count,cname_ename):
 #传入皮肤根地址和名称对应皮肤数量的字典和名称对应编号的字典
 '''返回英雄名称对应的所有皮肤的url地址列表的字典,例如{小乔:[skin_url1,skin_url2],...}'''
 cname_url_list = {}
 for cname,count in cname_skin_count.items():
 #print(cname)
 #print(count)
 #print(skin_base_rul)
 #print(cname_ename[cname])
 base_url = skin_base_rul+str(cname_ename[cname])+'/'+str(cname_ename[cname])+'-bigskin-'
 #print(base_url)
 skin_url_list = [str(base_url)+str(num)+'.jpg' for num in range(1,count+1)]
 cname_url_list[cname] = skin_url_list
 return cname_url_list
#print()
d = get_skin_name_url(hero_skin_root_url,get_hero_skin_count(get_skin_name(hero_list_json)),get_ename(hero_list_json))
#print(d)
def get_cname_skin_name(cname_skin_name):#传入名称对应皮肤名称字符串的字典
 cname_skin_name_dict = {}  #返回名称对应【皮肤名称的列表】的字典
 for cname,skin_name_list in cname_skin_name.items():
 skin_list = [name for name in skin_name_list.split('|')]
 cname_skin_name_dict[cname] = skin_list
 return cname_skin_name_dict
 
#s = get_skin_name(hero_list_json)
#print(s)
#f = get_cname_skin_name(s)
#print(f)
def get_hero_skin(cname_url_list,cname_skin_name):#传入名称对应【皮肤名称列表】的字典和名称对应皮肤url列表的字典
 # """获取每个英雄的图片"""
 for cname,skin_url in cname_url_list.items():
 
 if mkdir(skin_base_dir+cname):#创建指定目录
  os.chdir(skin_base_dir+cname) #进入到创建的目录
  
  for i in range(len(skin_url)):
  file_name = cname_skin_name[cname][i]+'.jpg'
  r = requests.get(skin_url[i])
  with open(file_name,'wb') as f:
   f.write(r.content)
#创建目录
def mkdir(path):
 # 引入模块
 import os
 # 去除首位空格
 path=path.strip()
 # 去除尾部 \ 符号
 path=path.rstrip("\\")
 # 判断路径是否存在
 # 存在 True
 # 不存在 False
 isExists=os.path.exists(path)
 # 判断结果
 if not isExists:
 # 如果不存在则创建目录
 # 创建目录操作函数
 os.makedirs(path)
 print(path+' 创建成功')
 return True
 else:
 # 如果目录存在则不创建,并提示目录已存在
 print(path+' 目录已存在')
 return False
 return 
if __name__ == '__main__':
 
 hero_list_body = requests.get(hero_list_url) #请求英雄列表
 hero_list_json = hero_list_body.json() #将英雄列表的获取的json数据转换为python对象
 cname_ename = {} #英雄名称对应英雄编号的字典
 cname__skin_name = {} #英雄名称对应皮肤名称字符串的字典
 cname_skin_count = {} #英雄名称对应皮肤数量的字典
 
 cname_skin_name_str_list = get_skin_name(hero_list_json)
 cname_skin_name_list = get_cname_skin_name(cname_skin_name_str_list)
 cname_skin_count = get_hero_skin_count(cname_skin_name_str_list)
 cname_ename = get_ename(hero_list_json)
 cnam_skin_url_list = get_skin_name_url(hero_skin_root_url,cname_skin_count,cname_ename)
 get_hero_skin(cnam_skin_url_list,cname_skin_name_list)

下面是保存抓取到的图片的文件夹样例:

用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例

上面就是抓取王者荣耀所有英雄皮肤的简单示例,上述的代码并没有使用python多线程执行抓取图片的函数,所以在执行的时候可能需要花费几分钟的时间,

以后在进行改进,添加使用python多线程执行抓取任务。

这篇用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python发布模块的步骤分享
Feb 21 Python
python+Django+apache的配置方法详解
Jun 01 Python
window下eclipse安装python插件教程
Apr 24 Python
python中requests和https使用简单示例
Jan 18 Python
python多个模块py文件的数据共享实例
Jan 11 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
Python编译为二进制so可执行文件实例
Dec 23 Python
Matplotlib 折线图plot()所有用法详解
Jul 28 Python
Python高并发解决方案实现过程详解
Jul 31 Python
Python列表嵌套常见坑点及解决方案
Sep 30 Python
Python实现扫码工具的示例代码
Oct 09 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 #Python
python编程通过蒙特卡洛法计算定积分详解
Dec 13 #Python
Python编程产生非均匀随机数的几种方法代码分享
Dec 13 #Python
windows下Virtualenvwrapper安装教程
Dec 13 #Python
python实现机械分词之逆向最大匹配算法代码示例
Dec 13 #Python
Python语言描述KNN算法与Kd树
Dec 13 #Python
Python xlwt设置excel单元格字体及格式
Apr 18 #Python
You might like
thinkphp3.0 模板中函数的使用
2012/11/13 PHP
TP5框架安全机制实例分析
2020/04/05 PHP
jQuery.extend 函数的详细用法
2012/06/27 Javascript
jquery $(this).attr $(this).val方法使用介绍
2013/10/08 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
JavaScript中的ubound函数使用实例
2014/11/04 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
基于AngularJS的拖拽文件上传的实例代码
2017/07/15 Javascript
vue中的scope使用详解
2017/10/29 Javascript
使用express搭建一个简单的查询服务器的方法
2018/02/09 Javascript
Vue 中使用 typescript的方法详解
2020/02/17 Javascript
微信小程序自定义弹出层效果
2020/05/26 Javascript
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
Python实现遍历windows所有窗口并输出窗口标题的方法
2015/03/13 Python
python实现自动更换ip的方法
2015/05/05 Python
Python常用时间操作总结【取得当前时间、时间函数、应用等】
2017/05/11 Python
Python实现的在特定目录下导入模块功能分析
2019/02/11 Python
创建Django项目图文实例详解
2019/06/06 Python
pyinstaller打包单个exe后无法执行错误的解决方法
2019/06/21 Python
关于PyTorch 自动求导机制详解
2019/08/18 Python
TensorFlow 输出checkpoint 中的变量名与变量值方式
2020/02/11 Python
Pytorch转tflite方式
2020/05/25 Python
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
法国亚马逊官方网站:Amazon.fr
2020/12/19 全球购物
毕业生大学生活自我总结
2014/01/31 职场文书
2014年关于两会精神的心得体会
2014/03/17 职场文书
绿化工程实施方案
2014/03/17 职场文书
电子商务专业应届生求职信
2014/05/28 职场文书
篮球比赛策划方案
2014/06/05 职场文书
文秘应届生求职信
2014/07/05 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
慰问信(范文3篇)
2019/10/23 职场文书
pytorch实现ResNet结构的实例代码
2021/05/17 Python
Mysql数据库索引面试题(程序员基础技能)
2021/05/31 MySQL