前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫——爬取王者荣耀全英雄台词语音

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

原创
作者头像
花落夏海-
修改2022-09-22 12:31:37
8250
修改2022-09-22 12:31:37
举报
文章被收录于专栏:王者荣耀

作者的话

我很喜欢王者荣耀里面的的英雄语音,每个英雄说的话都很有意思,因此,我想把他们全都下载下来,好好享用。我是个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()

  • 运行结果
  • 写在最后

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作者的话
  • 编程环境
  • 网页分析
  •  爬虫代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档