用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 相关文章推荐
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
Jun 18 Python
Python实现股市信息下载的方法
Jun 15 Python
python学习 流程控制语句详解
Jun 01 Python
教你学会使用Python正则表达式
Sep 07 Python
python实现闹钟定时播放音乐功能
Jan 25 Python
python库matplotlib绘制坐标图
Oct 18 Python
pytorch 改变tensor尺寸的实现
Jan 03 Python
python使用ctypes调用扩展模块的实例方法
Jan 28 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
Aug 11 Python
Pycharm制作搞怪弹窗的实现代码
Feb 19 Python
python标准库ElementTree处理xml
May 20 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
CI框架装载器Loader.php源码分析
2014/11/04 PHP
PHP全局使用Laravel辅助函数dd
2019/12/26 PHP
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
jQuery菜单插件用法实例
2015/07/25 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
JS中数组重排序方法
2016/11/11 Javascript
Angular和Vue双向数据绑定的实现原理(重点是vue的双向绑定)
2016/11/22 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
js 简易版滚动条实例(适用于移动端H5开发)
2017/06/26 Javascript
canvas绘制爱心的几种方法总结(推荐)
2017/10/31 Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
2018/08/17 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
使用Python编写类UNIX系统的命令行工具的教程
2015/04/15 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
利用python画出折线图
2018/07/26 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
Python使用pyserial进行串口通信的实例
2019/07/02 Python
python如何删除文件中重复的字段
2019/07/16 Python
Python实现哲学家就餐问题实例代码
2020/11/09 Python
CSS3弹性盒模型开发笔记(一)
2016/04/26 HTML / CSS
html5录音功能实战示例
2019/03/25 HTML / CSS
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
犹他州最古老的体育用品公司:Al’s
2020/12/18 全球购物
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
应届生英语教师求职信
2013/11/05 职场文书
新郎新娘婚礼答谢词
2014/01/11 职场文书
公司拓展活动方案
2014/02/13 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
2015年党支部公开承诺书
2015/01/22 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers
Mysql 数据库中的 redo log 和 binlog 写入策略
2022/04/26 MySQL