用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实现文件分组复制到不同目录的例子
Jun 04 Python
mysql 之通过配置文件链接数据库
Aug 12 Python
python timestamp和datetime之间转换详解
Dec 11 Python
http请求 request失败自动重新尝试代码示例
Jan 25 Python
教你使用python画一朵花送女朋友
Mar 29 Python
Django rest framework实现分页的示例
May 24 Python
python判断字符串或者集合是否为空的实例
Jan 23 Python
Windows系统Python直接调用C++ DLL的方法
Aug 01 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
Apr 13 Python
Python如何读写CSV文件
Aug 13 Python
python实现测试工具(二)——简单的ui测试工具
Oct 19 Python
Python根据URL地址下载文件并保存至对应目录的实现
Nov 15 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
通过PHP CLI实现简单的数据库实时监控调度
2009/07/01 PHP
PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】
2017/04/27 PHP
PHP实现的迪科斯彻(Dijkstra)最短路径算法实例
2017/09/16 PHP
TP5.0框架实现无限极回复功能的方法分析
2019/05/04 PHP
Javascript 个人笔记(没有整理,很乱)
2007/07/07 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
vue动态改变背景图片demo分享
2018/09/13 Javascript
vue项目强制清除页面缓存的例子
2019/11/06 Javascript
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
python实现简单遗传算法
2018/03/19 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
详解Python进阶之切片的误区与高级用法
2018/12/24 Python
Python----数据预处理代码实例
2019/03/20 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
python2.7的flask框架之引用js&css等静态文件的实现方法
2019/08/22 Python
基于python+selenium的二次封装的实现
2020/01/06 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
python3.6环境下安装freetype库和基本使用方法(推荐)
2020/05/10 Python
Python中如何引入第三方模块
2020/05/27 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
入党转预备思想汇报
2014/01/07 职场文书
酒店中秋节活动方案
2014/01/31 职场文书
警察先进个人事迹材料
2014/05/16 职场文书
经济国贸专业求职信
2014/06/18 职场文书
2014年平安创建工作总结
2014/11/24 职场文书
2014年个人年终总结
2015/03/09 职场文书
2015年文员个人工作总结
2015/04/09 职场文书
水电施工员岗位职责
2015/04/11 职场文书
2016十一国庆节感言
2015/12/09 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
我的收音机情缘
2022/04/05 无线电