用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机器学习理论与实战(六)支持向量机
Jan 19 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
使用Python实现在Windows下安装Django
Oct 17 Python
Python3对称加密算法AES、DES3实例详解
Dec 06 Python
python+selenium 鼠标事件操作方法
Aug 24 Python
wxPython实现画图板
Aug 27 Python
基于python的列表list和集合set操作
Nov 24 Python
解决pyshp UnicodeDecodeError的问题
Dec 06 Python
pytorch 实现在预训练模型的 input上增减通道
Jan 06 Python
总结Pyinstaller的坑及终极解决方法(小结)
Sep 21 Python
PyTorch的Debug指南
May 07 Python
浅谈pytorch中的dropout的概率p
May 27 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
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
PHP引用的调用方法分析
2016/04/25 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
PHP getNamespaces()函数讲解
2019/02/03 PHP
wordpress之js库集合研究介绍
2007/08/17 Javascript
学习ExtJS Panel常用方法
2009/10/07 Javascript
写给想学习Javascript的朋友一点学习经验小结
2010/11/23 Javascript
JSONP 跨域访问代理API-yahooapis实现代码
2012/12/02 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
JavaScript 浏览器对象模型BOM使用介绍
2015/04/13 Javascript
自定义require函数让浏览器按需加载Js文件
2016/11/24 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
重新理解JavaScript的六种继承方式
2017/03/24 Javascript
bootstrap switch开关组件使用方法详解
2017/08/22 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
2019/03/04 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
关于layui的下拉搜索框异步加载数据的解决方法
2019/09/28 Javascript
js判断密码强度的方法
2020/03/18 Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
2020/11/11 Javascript
用pandas按列合并两个文件的实例
2018/04/12 Python
python交互界面的退出方法
2019/02/16 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
通过python扫描二维码/条形码并打印数据
2019/11/14 Python
extern在函数声明中是什么意思
2014/01/19 面试题
美食节目策划方案
2014/05/31 职场文书
体育课外活动总结
2014/07/08 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
服务员岗位职责
2015/02/03 职场文书
廉政承诺书范文
2015/04/28 职场文书
狂人日记读书笔记
2015/06/30 职场文书
CSS极坐标的实例代码
2021/06/03 HTML / CSS