用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 相关文章推荐
Django 前后台的数据传递的方法
Aug 08 Python
socket + select 完成伪并发操作的实例
Aug 15 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
python和opencv实现抠图
Jul 18 Python
python样条插值的实现代码
Dec 17 Python
Python 函数返回值的示例代码
Mar 11 Python
详解Django模版中加载静态文件配置方法
Jul 21 Python
Python pickle模块实现对象序列化
Nov 22 Python
TensorFlow命名空间和TensorBoard图节点实例
Jan 23 Python
Python selenium自动化测试模型图解
Apr 15 Python
Python web如何在IIS发布应用过程解析
May 27 Python
python自动统计zabbix系统监控覆盖率的示例代码
Apr 03 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
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
谷歌音乐搜索栏的提示功能php修正代码
2011/05/09 PHP
调整PHP的性能
2013/10/30 PHP
destoon切换城市后实现logo旁边显示地区名称的方法
2014/08/21 PHP
php传值赋值和传地址赋值用法实例分析
2015/06/20 PHP
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
JavaScript设计模式之策略模式实例
2014/10/10 Javascript
jQuery文字横向滚动效果的实现代码
2016/05/31 Javascript
javascript用正则表达式过滤空格的实现代码
2016/06/14 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
2019/04/30 Javascript
element实现合并单元格通用方法
2019/11/13 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
python实现可将字符转换成大写的tcp服务器实例
2015/04/29 Python
Python文件夹与文件的相关操作(推荐)
2016/07/25 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
python得到电脑的开机时间方法
2018/10/15 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
在linux下实现 python 监控usb设备信号
2019/07/03 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
Python利用matplotlib绘制约数个数统计图示例
2019/11/26 Python
python实现学生成绩测评系统
2020/06/22 Python
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
党员的自我评价范文
2014/01/02 职场文书
留学推荐信写作指南
2014/01/25 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
名人演讲稿范文
2014/09/16 职场文书
2014城乡环境综合治理工作总结
2014/12/19 职场文书
2015年校务公开工作总结
2015/05/26 职场文书
在JavaScript中如何使用宏详解
2021/05/06 Javascript
nginx配置虚拟主机的详细步骤
2021/07/21 Servers