3分钟实现语音播报微博热搜

2020-06-19 10:34:05 浏览数 (1)

前几天看到一篇爬取微博热搜并语音播报的文章,觉得很好玩,就试着自己写了一下,我写的是简单版的代码,为了便于理解,做完熬夜做了一个小视频讲解。

主要思路:

1、获取热搜页面的返回数据

2、筛选热搜页面中的热搜名称、排行等信息

3、百度语音播报

微博热搜页面:https://s.weibo.com/top/summary

这个页面不需要用户登录,就能获取页面数据,所以我们不需要考虑登录时获取token的问题,这个下次会单独做个视频讲解。

获取微博热搜内容:

(由于语音识别只能支持1024个字节,所以我只爬取了前十的排行榜)

代码语言:javascript复制
url = 'https://s.weibo.com/top/summary'
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
                  '(KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}
def get_text():
    list = []
    response = requests.get(url=url, headers=header)
    if response.status_code == 200: #判断接口请求是否正确
        html = etree.HTML(requests.get(url, headers=header).text) # 构造XPath解析对象
        hot_search_name = html.xpath('//td[@class="td-02"]/a/text()')  # 热搜名 字符串列表
        hot_search_rank = html.xpath('//td[@class="td-01 ranktop"]/text()')  # 热搜排行
        hot_search_name_true = hot_search_name[1:]  # 只取热搜排行,不取置顶热搜
        for i in range(0, 10):
            s = '第' hot_search_rank[i] '名'   hot_search_name_true[i] # 排行和热搜组合
            list.append(s)
    else:
        print('wrong')
    result = ''.join(list) # list转str
    return result

百度语音API地址:https://ai.baidu.com/ai-doc/SPEECH/Gk4nlz8tc

使用方法:创建百度账号->添加应用->获取id、key和secret_key,具体可以参考下面这篇文章,有讲过如何创建应用 【巧用校验码】

百度语音识别

代码语言:javascript复制
APP_ID = '19942258'
API_KEY = 'XXX'
SECRET_KEY = 'XXX'
def speech():
    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    result = client.synthesis(get_text(), 'zh', 1, {
        'vol': 5,  #音量
        'per': 0,  # 发音人选择
        'pit': 7, # 音调
        'spd': 4 # 语速
    })
    # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
    if not isinstance(result, dict):
        with open('auido.mp3', 'wb') as f:
            f.write(result)

代码很简单,有空的可以尝试下,挺好玩的。最后给大家贴一下我爬取后的音频。

0 人点赞