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

作者:KillerTwo 时间:2023-11-27 01:27:23 

本文使用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第三方模块抓取王者荣耀所有英雄的皮肤实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

来源:http://www.cnblogs.com/yourblog/archive/2017/12/13/8035180.html

标签:python,requests,抓取,王者荣耀,英雄,皮肤
0
投稿

猜你喜欢

  • 浮动元素对浏览器的支持

    2008-02-02 10:05:00
  • python+Selenium自动化测试——输入,点击操作

    2023-08-09 07:20:50
  • 十“问”DreamWeaver

    2007-02-03 11:39:00
  • python创建与遍历List二维列表的方法

    2023-04-29 13:07:48
  • php遍历目录方法小结

    2023-11-17 12:49:40
  • 详解python-docx处理Word必备工具

    2023-10-03 03:15:08
  • django 简单实现登录验证给你

    2023-07-25 02:25:46
  • 关于golang 字符串 int uint int64 uint64 互转问题

    2023-07-13 17:52:44
  • python通配符之glob模块的使用详解

    2021-07-16 23:13:18
  • python读取大文件越来越慢的原因与解决

    2022-07-23 08:35:28
  • 建立合理的索引提高SQL Server的性能

    2009-01-23 14:44:00
  • js清空form表单中的内容示例

    2023-08-23 16:22:02
  • Python操作CSV格式文件的方法大全

    2023-07-08 18:57:45
  • Python 绘制酷炫的三维图步骤详解

    2022-08-28 21:07:08
  • Python数据可视化之Seaborn的使用详解

    2022-10-25 21:57:31
  • JSON+JavaScript处理JSON的简单例子

    2023-10-09 09:39:56
  • 网站的新趋势

    2008-12-11 13:36:00
  • python自动登录12306并自动点击验证码完成登录的实现源代码

    2021-07-08 12:50:29
  • 一些Python中的二维数组的操作方法

    2022-10-21 16:14:42
  • python数据分析:关键字提取方式

    2022-03-08 09:23:37
  • asp之家 网络编程 m.aspxhome.com