【爬虫】50 行代码爬取王者荣耀 98 个英雄所有皮肤

思路

1. 分析目标网页,确定爬取的 url 路径
2. 发送请求 requests 模拟浏览器发送请求,获取响应数据
3. 解析数据
4. 保存数据

 

使用谷歌浏览器

  1. 打开王者荣耀官网
  2. 找到英雄资料
  3. 调出检查工具
  4. 点击network
  5. 选择XHR过滤器(服务器与客户端交互的数据会放在XHR过滤器中)
  6. 点击重新加载,可以看到herolist.json文件
  7. 双击下载
  8. 下载后可以看到里边的数据整体来说是列表类型的,其中的每一个元素是字典类型的(键值对)

 

game.gtimg.cn/images/yxzj/img201606/skin/hero-info/524/524-bigskin-2.jpg

game.gtimg.cn/images/yxzj/img201606/skin/hero-info/524/524-bigskin-1.jpg

 

game.gtimg.cn/images/yxzj/img201606/skin/hero-info/176/176-bigskin-1.jpg

game.gtimg.cn/images/yxzj/img201606/skin/hero-info/176/176-bigskin-2.jpg

game.gtimg.cn/images/yxzj/img201606/skin/hero-info/176/176-bigskin-3.jpg

 

通过这些图片路径找规律可得:

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/

这是都一样的

106/106

这个是英雄的编号

-bigskin-

这个也都一样

1

这个是第几个皮肤

.jpg

这个也一样的

 

找到请求的地址

后边的代码会用到以下几个知识点:

字符串类型分割为列表类型的数据

异常处理

文件读写

 

完整代码如下:

 

"""
王者 爬取全部皮肤的一个小案例

"""

import requests, os, random

url = 'https://pvp.qq.com/web201605/js/herolist.json'

agent = '填自己的'

# 请求头
headers = {'User-Agent': agent}

# 模拟浏览器发起请求
response = requests.get(url, headers)
# json解析
json_list = response.json()
# print(json_list)

for i in json_list:
    try:
        hero_num = i['ename']
        hero_name = i['cname']
        print('英雄编号', hero_num, '英雄名称', hero_name)
        skin_list = i['skin_name'].split('|')
        print('英雄皮肤', skin_list)
        # range函数 开始 结尾 步长  含头不含尾
        for x in range(1, len(skin_list) + 1):
            base_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'
            # 强制 str int list tuple set
            pic_url = base_url + str(hero_num) + '/' + str(hero_num) + '-bigskin-' + str(x) + '.jpg'
            print(pic_url)
            pic = requests.get(pic_url).content
            # 路径 防止转义 \n \t
            file_path = r'D:\wzry_skin'
            if not os.path.exists(file_path):
                # 创建文件
                os.makedirs(file_path)
            # 英雄名字-英雄皮肤.jpg
            with open(file_path + '/' + hero_name + '-' + skin_list[x - 1] + '.jpg', 'wb') as f:
                f.write(pic)

    except KeyError as f:
        print(hero_name, '没有皮肤')



# 微信公众号:IT核电站

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值