用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实现实例
Apr 26 Python
深入理解Python中各种方法的运作原理
Jun 15 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
Sep 21 Python
python爬虫爬取淘宝商品信息
Feb 23 Python
解决Pycharm调用Turtle时 窗口一闪而过的问题
Feb 16 Python
python抖音表白程序源代码
Apr 07 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 Python
Python any()函数的使用方法
Oct 28 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
Jan 06 Python
python模拟预测一下新型冠状病毒肺炎的数据
Feb 01 Python
python3 os进行嵌套操作的实例讲解
Nov 19 Python
flask项目集成swagger的方法
Dec 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
用PHP制作静态网站的模板框架(一)
2006/10/09 PHP
在任意字符集下正常显示网页的方法二(续)
2007/04/01 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
php单例模式实现方法分析
2015/03/14 PHP
[原创]smarty简单模板变量输出方法
2016/07/09 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
2018/06/16 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
Javascript中的高阶函数介绍
2015/03/15 Javascript
纯js代码制作的网页时钟特效【附实例】
2016/03/30 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
详解Vue串联过滤器的使用场景
2020/04/30 Javascript
在NodeJs中使用node-schedule增加定时器任务的方法
2020/06/08 NodeJs
Vue实现图书管理小案例
2020/12/03 Vue.js
[06:24]DOTA2亚洲邀请赛小组赛第三日 TOP10精彩集锦
2015/02/01 DOTA
Python搭建HTTP服务器和FTP服务器
2017/03/09 Python
详解python基础之while循环及if判断
2017/08/24 Python
简单谈谈Python的pycurl模块
2018/04/07 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
Python画图高斯分布的示例
2019/07/10 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
Python闭包与装饰器原理及实例解析
2020/04/30 Python
详解CSS透明opacity和IE各版本透明度滤镜filter的最准确用法
2016/12/20 HTML / CSS
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
给导游的表扬信
2014/01/10 职场文书
餐饮业经理竞聘演讲稿
2014/01/14 职场文书
商场中秋节活动方案
2014/02/07 职场文书
家长学校培训材料
2014/08/20 职场文书
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
母亲节寄语大全
2015/02/27 职场文书
厉行节约工作总结
2015/08/12 职场文书
小学班级标语口号大全
2015/12/26 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
php png失真的原因及解决办法
2021/11/17 PHP