是不是有的时候懒得自己看新闻?那么不妨试试用 Python 来朗读给你听吧。
网页转换成语音,步骤无外乎:
之所以用 Python,就是因为 Python 有着丰富的库,网页正文识别也不在话下。这里我尝试了 readability、goose3。
readability 支持 Python3,使用 pip install readability-lxml 安装即可。
readability 使用起来也很方便:
但是 readability 提取到的正文内容不是文本,里面仍包含 HTML 标签。
当然也可以结合其他组件再对 HTML 进行处理,如 html2text,我们这里就不再延伸,有兴趣的可以自行尝试。
使用起来也很方便,同时对中文支持也不错。使用 pip install goose3 即可安装。
可以看出网页正文提取效果还不错,基本满足我们的要求,可以使用!
注意:goose 还有另外一个 Python2 的版本:Python-Goose,使用方法和 goose3 基本一样。
没办法,好的东西得来总是要曲折一些。其中百度的没有调用量的限制(其实默认是 200000 次/天),讯飞有每天 500 次的限制。
这里我们使用百度的 REST API 接口中的语言合成接口,一方面原因是百度的调用次数没有限制,另一方面,我大致看了下讯飞的接口文档,接口限制还是比较多的。还有就是百度提供了 REST API 的 Python 封装,使用也更方便。
使用示例如下:
接口参数:
参数
类型
描述
必传
tex
String
合成的文本,使用UTF-8编码,请注意文本长度必须小于1024字节
lang
String
语言选择,填写zh
ctp
String
客户端类型选择,web端填写1
cuid
String
用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内
spd
String
语速,取值0-9,默认为5中语速
pit
String
音调,取值0-9,默认为5中语调
vol
String
音量,取值0-15,默认为5中音量
per
String
发音人选择,0为女声,1为男声,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女
接口对单次传入的文本进行了限制,合成文本长度必须小于 1024 字节,如果文本长度过长,就需要进行切割处理,采用多次请求的方式,分别转换成语音文件,最后再将多个语音文件合并成一个。
可以使用如下代码将文本分割成多个长度为 500 的文本列表
我们使用 pydub 来处理生成的音频文件。使用 pip install pydub 即可安装。
这里有一个测试时生成的文件,大家可以试听一下:
通过百度的接口,我们可以将文字转化成音频文件,下面的问题就是如何播放音频文件。
网上获取到 Python 播放 wav 文件的方式由好几种,包括 pyaudio、pygame、winsound、playsound。不过测试下来,只有 playsound 成功。其他方式有兴趣的可以试下,有问题可以留言交流。
使用 pip install playsound 安装后即可使用。
使用也很简单:
说明:音频的播放需要在图形化页面下运行,因为命令行模式下,没有播放声音的出口。
运行后,代码就会自动解析网页并进行朗读啦。
至此,网页到音频的转换就结束了,当然程序没有这么完美,比如中英文混合的网页解析和转换的结果就不怎么理想,但是纯中文的新闻页面效果还是不错的。