1. 下载 Fid­dler 或其他抓包软件

    如果用的 Fid­dler 可以参考 小白通过Fiddler爬取手机app的数据并提取出来(详细版)_王者营地抓包-CSDN博客 中 Fid­dler 的配置。

  2. 配置完后,打开 QQ 小程序-王者营地(微信小程序和王者营地 APP 已经均无法轻易爬取)

  3. 找到这个玩意 image.png

  4. 复制这一条,并保存,文件打开后如图中记事本 image.png

  5. 处理 json 数据,可以先在这上面看下大概的数据结构
    JSON在线解析及格式化验证 — JSON.cn

  6. 简而言之,对 json 文件运行以下代码

    import csv
    import codecs
    import json
    import os
    from urllib.request import urlretrieve
    
    # 检查目录是否存在,如果不存在则创建
    
    icon_dir = './heroIcon/'
    
    if not os.path.exists(icon_dir):
    
        os.makedirs(icon_dir)
    
    # 数据文本的命名
    
    file_name = 'wangzhedata.csv'
    
    # 文件的保存路径
    
    path = file_name
    
    # 指定编码为 utf-8, 避免写 csv 文件出现中文乱码
    
    with codecs.open(path, 'w', 'utf-8') as csvfile:
    
        # 在创建wangzhedata.csv文件后,设立他们的首行表头
    
        filednames = ['英雄ID', '英雄名', '英雄职业', '热度',
    
                      '胜率', '登场率', 'Ban率', '头像链接', 'jumpurl']
    
        writer = csv.DictWriter(csvfile, fieldnames=filednames)
    
        writer.writeheader()
    
        # 读取json文件内容,返回字典格式
    
        with open(r'E:\code\wangzhe_database\top.json', 'r', encoding='utf8')as fp:
    
            # 加载json文件,解码规格化
    
            json_data = json.load(fp)
    
            # 加载完后,它为dict,这点需要我们来分析(dict、list类型)
    
            hero_list = json_data['data']['list']
    
            for i in hero_list:
    
                heroInfo = i['heroInfo']
    
                heroId = heroInfo['heroId']
    
                heroName = heroInfo['heroName']
    
                heroIcon = heroInfo['heroIcon']
    
                # 这里是下载我们英雄的图标
    
                image_path = './heroIcon/' + heroName + '.jpg'
    
                if not os.path.exists(image_path):
    
                    urlretrieve(heroIcon, image_path)
    
                jumpUrl = heroInfo['jumpUrl']
    
                heroCareer = heroInfo['heroCareer']
    
                winRate = i['winRate']
    
                banRate = i['banRate']
    
                showRate = i['showRate']
    
                tRank = i['tRank']
    
                try:
    
                    # 将每次取出的英雄属性进行一行一行的写入
    
                    writer.writerow({'英雄ID': heroId,
    
                                     '英雄名': heroName,
    
                                     '英雄职业': heroCareer,
    
                                     '热度': tRank,
    
                                     '胜率': winRate,
    
                                     '登场率': showRate,
    
                                     'Ban率': banRate,
    
                                     '头像链接': heroIcon,
    
                                     'jumpurl': jumpUrl})
    
                except UnicodeEncodeError as e:
    
                    print(f"编码错误, 该数据无法写到文件中, 直接忽略该数据: {e}")
    
                    print(
    
                        f"问题数据: {heroId}, {heroName}, {heroCareer}, {tRank}, {winRate}, {showRate}, {banRate}, {heroIcon}, {jumpUrl}")
    
    # 关闭 CSV 文件
    
    csvfile.close()
  7. 此时 csv 的编码格式为 utf8,直接通过 excel 打开会出现乱码。可以通过用记事本打开,另存为ANSI

image.png

到此完成~

By kiFte

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注