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

网页转换成语音,步骤无外乎:

网页正文识别,获取到正文的文本内容;

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

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

1 网页正文识别

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

1.1 readability

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

readability 使用起来也很方便:

import requestsfrom 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)

接口参数:

参数

类型

描述

必传

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 字节,如果文本长度过长,就需要进行切割处理,采用多次请求的方式,分别转换成语音文件,最后再将多个语音文件合并成一个。

2.2 文本切割

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

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

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

我们使用 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 = Nonefor 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

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

Python 朗读世界杯新闻来自AI派00:0003:11

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

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 总结

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

Python借助AI已经火的不能再火了,如果你想学习Python或者AI,你可以加入我的知识星球。【AI派】知识星球是我主打的一个实战的付费社区,在这里,你能获得

带着大家使用Python做AI相关(如数据分析、机器学习、推荐系统等)的项目

不定期布置相关作业,监督大家学习

学习、工作中的任何疑问随时可以向我提问

更好氛围的微信技术交流群

免费的学习资料

结识更多的朋友

原文发布时间为:2018-09-12

本文作者:AI派

本文来自云栖社区合作伙伴“”,了解相关信息可以关注“AI派”。

python朗读网页-早上起床后不想动,让 Python 来帮你朗读网页吧相关推荐

  1. 早上起床后喝一杯白开水是非常有好处的

    总的来说,早上起床后喝一杯白开水是非常有好处的,这是一个值得我们养成的良好习惯.我现在每天早上起床刷牙后都会喝上一小杯温开水,就是用白开水与凉白开兑在一起变成温水,这对于促进排便真的很有好处.基本上每 ...

  2. 早上起床后喝的第一杯水最好选择白开水

    最后,早上起床后喝的第一杯水最好选择白开水,不要选择淡盐水.蜂蜜水.果汁或者碳酸饮料等.因为淡盐水会增加增加盐的摄入,不仅会容易让人觉得口干舌燥,而且还会影响到血压的变化.特别是对于本身有高血压.心脑 ...

  3. 早上起床后喝的第一杯水不要喝太多

    其次,早上起床后喝的第一杯水不要喝太多,以喝300毫升左右的水最佳,因为我们晚上流失的水分也就400毫升左右,不需要喝太多,而且喝太多的水会进一步稀释胃液,不利于下一步早餐的消化.而且在喝水时最好是喝 ...

  4. 在早上起床后适当的喝一杯白开水

    因此,在早上起床后适当的喝一杯白开水,就可以起到稀释血液的作用,从而降低血液稠度,促进血液循环,从而预防心脑血管疾病以及防止心脏血管疾病意外的发生.

  5. 难道早上起床后就一定要喝一杯白开水吗?

    俗话说"一日之计在于晨",当我们经过一晚上的休息之后,我们人体才有充沛的精力去应对新的一天,在这个时候我们的身体还需要进食早餐来补充早上所需要的能量,而在吃早餐之前,其实还有一个更 ...

  6. 早上起床后,如何快速调整心情?

    早上起床后,可以尝试以下几种方法来快速调整心情: 1. 深呼吸:缓慢.深呼吸数次,有助于放松身心. 2. 伸展运动:可以进行一些简单的伸展运动,如扭动脖子.转动肩膀等,有助于缓解身体僵硬. 3. 听音 ...

  7. 自学python怎么转行_没有基础的想转行学习Python怎么学

    展开全部 Python学习路线. 第一阶段Python基础与Linux数据库.这是Python的入门阶段,也是帮助零基础学员打好基础的重要阶62616964757a686964616fe59b9ee7 ...

  8. 转行python能拿到多少钱_想转行学python过来人提醒大家几点

    因为目前python非常火,应用也非常广泛,是目前最火的行业之一,竞争很大,工资很高,未来发展也极好. Python 现在到底有多热呢?我觉得我们可以看以下的这2组数据. 第一:Python 排名稳居 ...

  9. python人工智能应用实例_90后博士说,从Python到人工智能只差这35个趣味案例,越学越有趣...

    有趣的生活每个人都向往,有趣的Python编程学习方式却不是每个人都体验过. 以这35个趣味案例开始,让兴趣成为学习Python最好的动力. 看看这35个趣味案例,几乎是每个案例都对应着一个Pytho ...

最新文章

  1. Silverlight实用窍门系列:35.细解Silverlight冒泡路由事件和注册冒泡路由事件【附带实例源码】...
  2. C#中数据类型的安全转换(is,as)
  3. Word2Vec中文语料实战
  4. 改善医疗营运效率 哈佛医学中心与 AWS 共同合作
  5. [蓝桥杯2016决赛]平方末尾-数论,枚举
  6. java jdbc mysql 乱码_【求助】为什么用纯java jdbc插入mysql一直乱码
  7. java中按钮的接口_Java接口基础
  8. 自动修改mysql5.7初始化密码
  9. Membership Leakage in Label-Only Exposures论文解读
  10. java 报表 存储过程_快逸报表数据集类型采用存储过程介绍
  11. iredmail mysql 配置_Iredmail各大组件连接Mysql配置说明
  12. 问题解决:shared_ptr Assertion px != 0 failed 及debug经验分享
  13. SQL Server获取当年第一天当年最后一天当月第一天当月最后一天
  14. 目前免费用可用的天气api接口及失效接口
  15. Java 用Freemarker完美导出word文档(带图片)
  16. JDK8的介绍下载和安装(附网盘地址)
  17. 一篇文章学会 SVN
  18. HTML制作登录页面
  19. 《最优化方法》——无约束具体算法以及KK
  20. SpringBoot集成security(1)|(security入门)

热门文章

  1. swift3 循环滚动视图 自适应横竖屏 reload数据源
  2. IDEA下JNI开发快速生成头文件方法
  3. eclipse - unresolved inclusion: stdio.h
  4. tree view 後台編寫
  5. 去掉动网广告“国内使用量最大的动网论坛”的方法
  6. hdu3001(三进制状压)
  7. HTML5 浏览器接收的常用 content-type
  8. vue2.0读书笔记2-进阶
  9. Python使用struct处理二进制
  10. Python-S13-day2-之购物车