手把手教你使用python获取王者荣耀英雄及皮肤高清图片

本文介绍了一种使用Python的requests库和os库爬取王者荣耀英雄及其皮肤高清图片的方法。通过获取英雄列表json文件,解析英雄名称和编号,进而下载对应图片。提供了两种实现方式,一种是直接使用requests进行下载,另一种是设置代理服务器防止被封禁。
部署运行你感兴趣的模型镜像

利用requests库和os库,大概30行代码,就能把页面上的图片给爬取下来!

打开百度搜索“王者荣耀”进入官网:https://pvp.qq.com/,按F12进入调试界面,然后按F5刷新界面,图中标识的herolist.json文件就是我们所需要的英雄列表,其中包括英雄编号、英雄名称、英雄类型、皮肤的名称等信息,在文件上右击复制链接http://pvp.qq.com/web201605/js/herolist.json

还说这么多干什么嘞,直接上代码

代码如下所示:
(方法一)

# -*- coding: utf-8 -*-
"""
__title__ = '爬取王者荣耀英雄及皮肤高清图片'
__author__ = '张佑'
__mtime__ = '2020/04/06'
# code is far away from bugs with the god animal protecting
    I love animals. They taste delicious.
              ┏┓      ┏┓
            ┏┛┻━━━┛┻┓
            ┃      ☃      ┃
            ┃  ┳┛  ┗┳  ┃
            ┃      ┻      ┃
            ┗━┓      ┏━┛
                ┃      ┗━━━┓
                ┃  神兽保佑    ┣┓
                ┃ 永无BUG!   ┏┛
                ┗┓┓┏━┳┓┏┛
                  ┃┫┫  ┃┫┫
                  ┗┻┛  ┗┻┛
"""
import os
import requests
#获取所有英雄列表json文件
url = 'https://pvp.qq.com/web201605/js/herolist.json'
herolist = requests.get(url)  # 获取英雄列表json文件

herolist_json = herolist.json()  # 转化为json格式
hero_name = list(map(lambda x: x['cname'], herolist.json()))  # 提取英雄的名字
hero_number = list(map(lambda x: x['ename'], herolist.json()))  # 提取英雄的编号

# 下载壁纸图片
def downloadHeroPic():
    i = 0
    for j in hero_number:
        # 创建文件夹
        os.mkdir("D:\\PycharmProjects\\test\\zy\\" + hero_name[i])
        # 进入创建好的文件夹
        os.chdir("D:\\PycharmProjects\\test\\zy\\" + hero_name[i])
        i += 1
        #一般英雄皮肤数小于10,我们这里用10来遍历,如果存在就保存到本地
        for k in range(10):
            # 拼接url
            onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(j) + '-bigskin-' + str(k) + '.jpg'
            im = requests.get(onehero_link)  # 请求url
            if im.status_code == 200:
                open(str(k) + '.jpg', 'wb').write(im.content)  # 写入文件
downloadHeroPic()

print('完成啦!!!')

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

请求url的时候有时需要设置代理服务器,因为连续大量的请求,服务器会认为这是黑客攻击,会拒绝你当前ip的连接,导致请求失败,严重的话服务器会把你的ip或者与你同网段的ip地址拉入黑名单,导致一段时间无法访问连接。

当然,我们也有另一种方法:
(方法二)

# -*- coding: utf-8 -*-
"""
__title__ = '爬取王者荣耀英雄及皮肤高清图片'
__author__ = '张佑'
__mtime__ = '2020/04/06'
# code is far away from bugs with the god animal protecting
    I love animals. They taste delicious.
              ┏┓      ┏┓
            ┏┛┻━━━┛┻┓
            ┃      ☃      ┃
            ┃  ┳┛  ┗┳  ┃
            ┃      ┻      ┃
            ┗━┓      ┏━┛
                ┃      ┗━━━┓
                ┃  神兽保佑    ┣┓
                ┃ 永无BUG!   ┏┛
                ┗┓┓┏━┳┓┏┛
                  ┃┫┫  ┃┫┫
                  ┗┻┛  ┗┻┛
"""
from urllib import request, parse
import requests

# 设置request代理服务器
proxy_support = request.ProxyHandler({'http': 'http://xx.xx.xx.xx:xx'})
opener = request.build_opener(proxy_support, request.HTTPHandler)
request.install_opener(opener)

# 设置requests代理服务器
ip, port = ("125.126.222.12", "9999")
proxy_url = "http://{0}:{1}".format(ip, port)
proxy_dict = {
    'https': proxy_url,
}


class wzry(object):
    def __init__(self):
        self.page = 0  # 抓取的起始页
        self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64)'}  # 伪装成浏览器

    def get_page(self):
        try:
            while self.page <= 10:  # 设置抓取的结束页
                url = 'https://apps.game.qq.com/cgi-bin/ams/module/ishow/V1.0/query/workList_inc.cgi?' \
                      'activityId=2735&sVerifyCode=ABCD&sDataType=JSON&iListNum=20&totalpage=0&page=' + str(
                    self.page) + '&i' \
                                 'Order=0&iSortNumClose=1&iAMSAc' \
                                 'tivityId=51991&_everyRead=true&iTypeId=2&iFlowId=267733&' \
                                 'iActId=2735&iModuleId=2735&_=1554873059538'
                self.page = self.page + 1
                req = request.Request(url, headers=self.headers)
                response = request.urlopen(req)
                data = response.read()
                list_data = eval(data)['List']
                for ls in list_data:
                    # 抓取图片url并替换特殊符号
                    sProdImgNo_6 = ls['sProdImgNo_6'].replace('%3A', ':').replace('%2F', '/').replace('%2E',
                                                                                                      '.').replace(
                        '%5F', '_').replace('%2D', '-').replace('200', '0')
                    sProdName = ls['sProdName']
                    img_name = parse.unquote(sProdName)  # 解码字符串
                    img = requests.get(sProdImgNo_6, proxies=proxy_dict, verify=False)  # 抓取图片
                    print(f'正在抓取 {img_name} 高清皮肤......')
                    # 写入文件
                    with open(f'D:/PycharmProjects/test/{img_name}.jpg', 'wb') as f:
                        f.write(img.content)
        except request.URLError as e:
            if hasattr(e, 'reason'):
                print(f'抓取失败,失败原因:{e.reason}')


class main():
    wzry().get_page()


if __name__ == '__main__':
    main()
    print('抓取完成。。。')

最终结果如下所示:
在这里插入图片描述
在这里插入图片描述
当然,如果你想要获取这些资源,但是你却比较懒,你也可以点击后面的这个链接:王者荣耀英雄及皮肤高清图片

或者扫描二维码,回复关键字“王者荣耀”
在这里插入图片描述

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值