python面向对象实例王者荣耀_用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例...

本文使用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)

下面是保存抓取到的图片的文件夹样例:

201712140940466.jpg

上面就是抓取王者荣耀所有英雄皮肤的简单示例,上述的代码并没有使用python多线程执行抓取图片的函数,所以在执行的时候可能需要花费几分钟的时间,

以后在进行改进,添加使用python多线程执行抓取任务。

这篇用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

本文标题: 用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例

本文地址: http://www.cppcns.com/jiaoben/python/214473.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值