python项目-批量获取王者荣耀皮肤

1、首先,伪装用户代理访问要爬取的皮肤网站:鼠标点中一个皮肤后,鼠标右键选“检查”,选择“Network”,复制User-Agent后面的代码。
在这里插入图片描述
如果右键选检查后出现空白框则需要刷新。

2、下一步,每个英雄皮肤有1到n个不等,所以我们需要遍历对应英雄的每个皮肤。
以“夏洛特”为例,每个皮肤下面有对应皮肤的中文名字,所以我们要用xpath定位数据列表:
要的数据在这里
在皮肤页面选择“xpath.helper”插件,输入://ul[@class='pic-pf-list pic-pf-list3']
在这里插入图片描述
在这里插入图片描述

注意:

尽量用chrome浏览器的xpath插件,没有的话应用商店下载一个即可。

在编码中要用到gbk防止出现中文乱码:hero_info_resp.encoding = 'gbk'

遍历中要注意hero-info后面的两串数字要改为之前定义了的名称:resp = requests.get(f'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{ename}/{ename}-bigskin-{i+1}.jpg',headers=headers)

bigskn后面也要改为要下载的图片名称:{i+1}.jpg
在这里插入图片描述

我们的项目是获取所有英雄的皮肤,并且要把皮肤照片保存到各自英雄的文件夹中,文件夹以英雄名字命名,下载时间是每隔一秒下载一个。

具体代码如下:

import requests
#解析html工具 lxml 原则上python无法直接提取HTML代码 etree用xpath提取
from lxml import etree
import os
from time import sleep

#伪装自己访问网站
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'}
#英雄头像
hero_info_url = 'https://pvp.qq.com/web201605/js/herolist.json'
hero_info_resp = requests.get(hero_info_url,headers=headers)
# print(hero_info_resp.json())
#每个英雄保存在单独文件夹
for h in hero_info_resp.json():
    ename = h.get('ename')
    cname = h.get('cname')
    if not os.path.exists(cname):
        os.makedirs(cname)
#访问英雄主页
hero_info_url = 'https://pvp.qq.com/web201605/herodetail/{ename}.shtml'
hero_info_resp = requests.get(hero_info_url,headers=headers)
#防止出现中文乱码
hero_info_resp.encoding = 'gbk'
e = etree.HTML(hero_info_resp.text)
names = e.xpath('//ul[@class="pic-pf-list pic-pf-list3"]/@data-imgname')[0]

#去掉原有的字符&0 &1 &2 &3
names = [name[0:name.index('&')] for name in names.split('|')]
#发送请求
#遍历name值给n,n是第几次遍历
for i,n in enumerate(names):
    resp = requests.get(f'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{ename}/{ename}-bigskin-{i+1}.jpg',headers=headers)
    #接受服务器响应的图片
    #保存图片
    with open(f'{cname}/{n}.jpg','wb') as f:
        f.write(resp.content)
    print(f'已下载:{n}的皮肤')
    #每一秒下载一个皮肤
    sleep(1)


最后的每一秒下载一个是因为避免服务器防止反爬而封掉我们的IP,所以爬取时要降低访问频率。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值