是不是有的时候懒得自己看新闻?那么不妨试试用 Python 来朗读给你听吧。

网页转换成语音,步骤无外乎:网页正文识别,获取到正文的文本内容;

文本转语音,通过接口将文本转换成语音文件;

语音文件的发声,即将语音文件读出;

1 网页正文识别

之所以用 Python,就是因为 Python 有着丰富的库,网页正文识别也不在话下。这里我尝试了 readability、goose3。

1.1 readability

readability 支持 Python3,使用 pip install readability-lxml 安装即可。

readability 使用起来也很方便:

import requests

from readability import Document

response = requests.get('http://news.china.com/socialgd/10000169/20180616/32537640_all.html')

doc = Document(response.text)

print(doc.title())

但是 readability 提取到的正文内容不是文本,里面仍包含 HTML 标签。

当然也可以结合其他组件再对 HTML 进行处理,如 html2text,我们这里就不再延伸,有兴趣的可以自行尝试。

1.2 goose3

Goose 本来是一个用 Java 编写的文章提取器,后来就有了 Python 实现版: goose3 。

使用起来也很方便,同时对中文支持也不错。使用 pip install goose3 即可安装。

>>> from goose3 import Goose

>>> from goose3.text import StopWordsChinese

>>> url = 'http://news.china.com/socialgd/10000169/20180616/32537640_all.html'

>>> g = Goose({'stopwords_class': StopWordsChinese})

>>> article = g.extract(url=url)

>>> print(article.cleaned_text[:150])

北京时间6月15日23:00(圣彼得堡当地时间18:00),2018年世界杯B组一场比赛在圣彼得堡球场展开角逐,伊朗1比0险胜摩洛哥,伊朗前锋阿兹蒙半场结束前错过单刀机会,鲍哈杜兹第95分钟自摆乌

龙。这是伊朗20年来首度在世界杯决赛圈取胜。

本届世界杯,既相继出现替补便进球,贴补梅开二度以及东道主

可以看出网页正文提取效果还不错,基本满足我们的要求,可以使用!注意:goose 还有另外一个 Python2 的版本:Python-Goose,使用方法和 goose3 基本一样。

2 文本转语音

文本转语音,百度、阿里、腾讯、讯飞等都有提供 REST API 接口,阿里和腾讯的申请相对时间较长,阿里的貌似还要收费,百度和讯飞的在线申请后即可使用。

没办法,好的东西得来总是要曲折一些。其中百度的没有调用量的限制(其实默认是 200000 次/天),讯飞有每天 500 次的限制。

这里我们使用百度的 REST API 接口中的语言合成接口,一方面原因是百度的调用次数没有限制,另一方面,我大致看了下讯飞的接口文档,接口限制还是比较多的。还有就是百度提供了 REST API 的 Python 封装,使用也更方便。

2.1 baidu-aip 的使用

百度提供了 Python SDK,使用 pip install baidu-aip 可以直接安装。接口的使用可以参考接口文档:http://ai.baidu.com/docs#/TTS-Online-Python-SDK/top。

使用示例如下:

from aip import AipSpeech

"""

你的 APPID AK SK

均可在服务控制台中的应用列表中查看。

"""

APP_ID = '你的 App ID'

API_KEY = '你的 Api Key'

SECRET_KEY = '你的 Secret Key'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

result = client.synthesis('你好,你在做什么', 'zh', 3, {

'vol': 5,

})

# 识别正确返回语音二进制 错误则返回dict 参照下面错误码

if not isinstance(result, dict):

with open('auido.mp3', 'wb') as f:

f.write(result)

接口参数:

参数类型描述必传texString合成的文本,使用UTF-8编码,请注意文本长度必须小于1024字节是

langString语言选择,填写zh是

ctpString客户端类型选择,web端填写1是

cuidString用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内否

spdString语速,取值0-9,默认为5中语速否

pitString音调,取值0-9,默认为5中语调否

volString音量,取值0-15,默认为5中音量否

perString发音人选择,0为女声,1为男声,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女否

接口对单次传入的文本进行了限制,合成文本长度必须小于 1024 字节,如果文本长度过长,就需要进行切割处理,采用多次请求的方式,分别转换成语音文件,最后再将多个语音文件合并成一个。

2.2 文本切割

可以使用如下代码将文本分割成多个长度为 500 的文本列表

# 将文本按 500 的长度分割成多个文本

text_list = [text[i:i+500] for i in range(0, len(text), 500)]

2.3 语言文件合并

我们使用 pydub 来处理生成的音频文件。使用 pip install pydub 即可安装。

另外还 Ubuntu 环境需要安装依赖的,使用 sudo apt-get install libav-tools 安装即可,而在 Windows 环境需要到 https://ffmpeg.zeranoe.com/builds/ 下载 FFmpeg,并将其配置到环境变量中。

若还有问题,可以参考官网配置:https://github.com/jiaaro/pydub。

# 合并音频文件

def merge_voice(file_list):

voice_dict = {}

song = None

for i,f in enumerate(file_list):

if i == 0:

song = AudioSegment.from_file(f,"mp3")

else:

# 拼接音频文件

song += AudioSegment.from_file(f,"mp3")

# 删除临时音频

os.unlink(f)

# 导出合并后的音频文件,格式为MP3格式

file_name = str(uuid.uuid1()) + ".mp3"

song.export(file_name, format="mp3")

return file_name

这里有一个测试时生成的文件,大家可以试听一下:

通过百度的接口,我们可以将文字转化成音频文件,下面的问题就是如何播放音频文件。

3 音频文件播放

网上获取到 Python 播放 wav 文件的方式由好几种,包括 pyaudio、pygame、winsound、playsound。不过测试下来,只有 playsound 成功。其他方式有兴趣的可以试下,有问题可以留言交流。

使用 pip install playsound 安装后即可使用。

使用也很简单:

>>> from playsound import playsound

>>> playsound('/path/to/a/sound/file/you/want/to/play.mp3')说明:音频的播放需要在图形化页面下运行,因为命令行模式下,没有播放声音的出口。

python page2voice.py -u "https://so.gushiwen.org/shiwenv_c244fc77f6fb.aspx"

运行后,代码就会自动解析网页并进行朗读啦。

4 总结

至此,网页到音频的转换就结束了,当然程序没有这么完美,比如中英文混合的网页解析和转换的结果就不怎么理想,但是纯中文的新闻页面效果还是不错的。

源码已上传至 GitHub,后台回复「网页」即可获取。

python 文字语音朗读-怎么用 Python 来朗读网页 ?相关推荐

  1. python 文字语音朗读-教你用 Python 来朗读网页

    是不是有的时候懒得自己看新闻?那么不妨试试用 Python 来朗读给你听吧. 网页转换成语音,步骤无外乎:网页正文识别,获取到正文的文本内容: 文本转语音,通过接口将文本转换成语音文件: 语音文件的发 ...

  2. VB简单播放器与python文字语音朗读

    1.VB简单播放器代码 之前在某度知道上看到的一个问题 回答了一下.代码如下: 用WindowsMediaPlayer1控件和Drive dir file做了一个简单的播放器.你可以美化界面和优化代码 ...

  3. python开发语音录入_基于python实现语音录入识别代码实例

    这篇文章主要介绍了如何通过python实现语音录入识别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 1.第一步录音存入本地 2.调用百度 ...

  4. python实现语音播放_用Python实现语音播报

    以下内容为带着儿子一起学Python的实现记录,为自己保存下来,也希望对其他学习者有用! 1. 确保已经安装python,本例使用python,操作系统为:Windows 10 专业版: 2. 设置环 ...

  5. python 文字语音朗读-python 利用pyttsx3文字转语音过程详解

    这篇文章主要介绍了python 利用pyttsx3文字转语音过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 # -*- coding: ut ...

  6. python 文字语音朗读软件下载_Python 文本转语音

    文本转语音,一般会用在无障碍开发.下面介绍如何使用Python实现将文本文件转换成语音输出. 准备 使用Speech API 原理示例代码小总结 pyttsx方式 原理示例代码小总结 pyttsx深入 ...

  7. python 文字语音朗读-python 利用pyttsx3文字转语音

    # -*- coding: utf-8 -*- import pyttsx3 f = open("all.txt",'r') line = f.readline() engine ...

  8. python文字语音互转

    目录 pyttsx SAPI SpeechLib PocketSphinx pyttsx 安装 pyttsx库:pip install pyttsx3 import pyttsx3 as px3spe ...

  9. python文字验证码识别_利用python进行验证码识别(预处理部分)

    # -*- coding: utf-8 -*- """Created on Thu Feb 1 15:52:05 2018@author: Administrator&q ...

最新文章

  1. 【开发环境】PyCharm 打开现有 Python 工程 ( 配置 Python 编译器版本 )
  2. python 字典查询比列表快_Python字典vs列表,哪个更快?
  3. C++求最小公倍數LCM的实现算法(附完整源码)
  4. 组合查询(机房重构知识点总结)
  5. 线上服务器登记的要点
  6. C语言高级编程:二维数组、指针的指针、数组指针、指针数组
  7. 手机网页里的模态对话框
  8. 一个简单的静态web服务器
  9. linux操作-centos下载mysql
  10. PKU 3013 Big Christmas Tree 最短路 spfa
  11. Java 实验5 T2 二进制数转换为十六进制数
  12. 网页打开摄像头_只要5分钟,快速掌握摄像头课件直播技巧
  13. mescroll-vue下拉上拉刷新的使用
  14. java watir_watir webdriver 安装
  15. 输入一行字符,统计其中的英文字符、数字字符、空格和其他字符的个数。
  16. 猪猪猫Windows7 X86旗舰中文装机版V0911
  17. 《信息安全系统设计基础》课程总结 20155335 俞昆
  18. 京东企业注册HTML
  19. java视、频_[java视频]感人故 事视 频网 站上那找~~~
  20. Bilstm+crf中的crf详解

热门文章

  1. 【財務会計】固定資産の除却と廃棄の違い
  2. Java7/8 中的 HashMap 和 ConcurrentHashMap
  3. Nginx.代理MySQL
  4. Linux下C语言的系统头文件
  5. 基于python物流管理系统毕业设计-长白高校邦数据科学通识课【Python基础语法】答案...
  6. python3安装pip3-python3安装pip3
  7. 有道python网课怎么样-如何用python“优雅的”调用有道翻译?
  8. python程序设计报告-20183215 实验三《Python程序设计》实验报告
  9. 零基础自学python的app-编程零基础应当如何开始学习 Python?
  10. python常见错误-Python 常见报错类型