Python爬虫——爬取王者荣耀全英雄台词语音

2022-09-22 12:31:37 浏览数 (1)

作者的话

我很喜欢王者荣耀里面的的英雄语音,每个英雄说的话都很有意思,因此,我想把他们全都下载下来,好好享用。我是个python爬虫初学者,经过一番摸索,我最终顺利地爬取了全部英雄语音,并把语音文本通过文件名显示,方便查找。

编程环境

python3.10

pycharm

网页分析

首先来到官网 https://pvp.qq.com/web201605/herolist.shtml 找到含有全部英雄的页面

进入网页后,按f12进行检查,找到herolist_json这个文件。

随便点击一个英雄,然后可以来到第二个页面,英雄资料页面鉴赏-语音-世界观体验站-王者荣耀官方网站-腾讯游戏 (qq.com)

 进入网页后,可以找到data_zlk_lb.json这个文件。

 接下来我们来看代码~~~~

 爬虫代码

代码语言:javascript复制
import os
import requests
import re
import json
 
# 创建王者语音总文件夹
if not os.path.exists('./王者语音'):
    os.mkdir('./王者语音')
 
 
# 主函数
def hero_wzry_voice():
 
    # UA伪装
    headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
                             "Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.33"}
 
    # 第一个请求头,需要得到[英雄的编号列表]和[英雄的名字列表]:
    herolist_json_url = 'https://pvp.qq.com/web201605/js/herolist.json'
    response1 = requests.get(url=herolist_json_url, headers=headers).text
 
    hero_id_list = re.findall('"ename": (. ?),', response1, re.S)      # 得到英雄的编号列表(乱序的
    hero_name_list = re.findall('"cname": "(. ?)"', response1, re.S)   # 得到英雄的名字列表(乱序的
 
    # 第二个请求头,需要得到所有英雄语音信息:
    voice_src_url = 'https://pvp.qq.com/zlkdatasys/data_zlk_lb.json'
    param = {
              'callback': 'createList'}
    response2 = requests.get(url=voice_src_url, headers=headers, params=param).text
 
    response2 = response2.replace('createList(', '').replace(')', '')  # 去掉不符合json格式的部分字符串数据
    json_dict = json.loads(response2)               # 将字符串json格式化变成字典
    hero = json_dict['yylb_34']                     # 字典取值,得到所有英雄的语音信息
 
    for i in range(len(hero)):
 
        id_result = hero[i]['yxid_a7']              # 最终的所有英雄编号
        hero_index = hero_id_list.index(id_result)  # 中间过程,获取所有英雄名称对应的索引,很关键的一步!!!
        name_result = hero_name_list[hero_index]    # 最终所有英雄编号对应的所有英雄名称
        voice_list = hero[i]['yy_4e']               # 获得所有英雄的语音列表
 
        _path = "./王者语音/{}/".format(name_result)
        if not os.path.exists(_path):
            os.mkdir(_path)                         # 创建次级文件夹,稍后以英雄的名字来命名
 
        for j in range(len(voice_list)):
 
            voice_text = voice_list[j]['yywa1_f2']                  # 语音内容的文本
            voice_url = 'http:'   voice_list[j]['yyyp_9a']          # 语音mp3的网址(url)
            voice_response = requests.get(url=voice_url, headers=headers).content
 
            # 异常捕获,我选择若遇到异常则跳过,继续执行程序
            try:
                with open(_path   '/'   '[' name_result ']'   '-'   voice_text   '.mp3', 'wb') as f:
                    f.write(voice_response)                         # 写入mp3文件
                    print('-----成功下载并保存语音-----')
 
            except OSError:
                continue
 
    print("*****王者荣耀英雄语音已全部爬取成功!*****")
 
 
if __name__ == "__main__":
    hero_wzry_voice()

  • 运行结果
  • 写在最后

我是初学者,代码就只能写成这样了,有疑问和不懂得地方可以在评论区提出噢~~

————————————————

0 人点赞