zl程序教程

您现在的位置是:首页 >  后端

当前栏目

用Python爬取王者荣耀英雄皮肤海报图

Python 荣耀 爬取 英雄 王者 皮肤 海报
2023-06-13 09:11:26 时间

介绍

在某平台公开课上学了怎么用python爬取王者的全英雄皮肤海报图,然后自己敲了一遍,发现还不错,把图片全部都爬取下来了,本来想用来做壁纸,但是一看,实在太丑,然后。。然后就不知道这些图片能干啥了。现在就来分享一些爬取王者海报图的思路。

思路

1,确定爬取的url路径

2,发送请求,一般需要模拟浏览器发送,需要用到 requests

3,解析数据,需要用json模块,json模块可以把json字符串转换换成Python可交互的数据

4,保存数据

开始

第一步

确定爬取的url路径

#在王者官网打开检查
base_url = 'https://pvp.qq.com/web201605/js/herolist.json'

第二步

模拟浏览器发送请求 这里要用到requests 获取响应数据

response = requests.get(base_url)
data_str = response.text  #--字符串

第三步

解析数据,要用到json模块,json模块可以把 json字符串转化成python可交互的数据类型,

1,转换数据类型

data_list = json.loads(data_str) 

2,解析数据

for data in data_list:
    # 提取图片所需参数
    ename = data['ename']  # 英雄编号
    cname = data['cname']  # 英雄名字
    try:
        skin_name = data['skin_name'].split('|')  # 切割皮肤的名字,用于计算每个英雄有多少个皮肤
    except Exception as e:
        print(e)
 
    # http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/524/524-bigskin-1.jpg
    #这是其中一个图片的url
    # http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/ + 英雄编号 + "/" + 英雄编号-bigskin-皮肤序号 + ".jpg"
    #这是图片url的格式

3,构建皮肤数量循环(使用for循环)

for skin_num in range(1, len(skin_name) + 1):
        skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(ename) + '/' + str(
            ename) + '-bigskin-' + str(skin_num) + '.jpg'

4,请求图片数据

skin_data = requests.get(skin_url).content

第四步

保存数据

with open('img\\' + cname + "-" + skin_name[skin_num - 1] + '.jpg', 'wb') as f:
            print('正在下载皮肤:', cname + "-" + skin_name[skin_num - 1])
            f.write(skin_data)

到这里就差不多结束了

完整代码

下面是一个完整代码

base_url = 'https://pvp.qq.com/web201605/js/herolist.json'
response = requests.get(base_url)
data_str = response.text
data_list = json.loads(data_str)
for data in data_list:
    ename = data['ename']  # 英雄编号
    cname = data['cname']  # 英雄名字
    try:
        skin_name = data['skin_name'].split('|')
    except Exception as e:
        print(e)
    for skin_num in range(1, len(skin_name) + 1):
        skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(ename) + '/' + str(
            ename) + '-bigskin-' + str(skin_num) + '.jpg'
        skin_data = requests.get(skin_url).content
        with open('img\\' + cname + "-" + skin_name[skin_num - 1] + '.jpg', 'wb') as f:
            print('正在下载皮肤:', cname + "-" + skin_name[skin_num - 1])
            f.write(skin_data) 

注意:要在目录下新建一个img的文件夹