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

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

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

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

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

01:网页正文识别

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

1.1 readabilityreadability 支持 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 基本一样。

02:文本转语音

文本转语音,百度、阿里、腾讯、讯飞等都有提供 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)

接口参数:

接口对单次传入的文本进行了限制,合成文本长度必须小于 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

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

03:音频文件播放

网上获取到 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"

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

04:总结

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

https://github.com/hoxis/to_voice/blob/master/page2voice.py

网页版python叫什么-我不想浏览网页,那么我就用Python实现网页自动化朗读!相关推荐

  1. Python为什么这么厉害? 不想成为专业码农? 来学习Python吧!

    2019独角兽企业重金招聘Python工程师标准>>> 什么是码农? 什么是码农,大家用它来自娱自乐,然而,其中的辛酸只有程序员自己知道.程序员冲锋在第一线,各个人都在盯着你的结果, ...

  2. 学python吧-Python为什么这么厉害? 不想成为专业码农? 来学习Python吧!

    什么是码农? 什么是码农,大家用它来自娱自乐,然而,其中的辛酸只有程序员自己知道.程序员冲锋在第一线,各个人都在盯着你的结果,不断给你施加压力.你就是一个机器一样的干活,除了干活还是干活.程序员的压力 ...

  3. python工程师薪资坑吗-想转行,是要入坑Python还是Java?这问题还用问?

    我有一个读者朋友问了我这么一个问题,他说:鬼哥,我是一个大三的学生,学的是计算机科学与技术专业,不过学校教得很杂,什么都只教一点,且什么都不深,感觉学到了很多的东西,但又觉得什么都没有学到,我现在很苦 ...

  4. 三国杀网页版普通服务器怎么进,就想知道老服怎么进_三国杀Online_玩家社区_三国杀官方社区 - Powered by Discuz!...

    查看: 531|回复: 4 就想知道老服怎么进 当前离线UID经验1979 粮饷67 最后登录2020-12-9 在线时间0 小时 六韬之略, 积分 1979, 距离下一级还需 1021 积分 六韬之 ...

  5. python成为金融编程_想做金融矿工,会写Python和C++就够了吗?

    "对 Quant 而言 Python 的需求高吗,除 C++ 外还有哪些流行的编程语言?">>更多FRM 相关问题点我咨询 1. 高 2. 还有:Python, Jav ...

  6. python爬取网页版QQ空间,生成词云图、柱状图、折线图(附源码)

    python爬取网页版QQ空间,生成词云图.柱状图.折线图 最近python课程学完了,琢磨着用python点什么东西,经过一番搜索,盯上了QQ空间,拿走不谢,欢迎点赞收藏,记得github给个sta ...

  7. Python爬虫【二】爬取PC网页版“微博辟谣”账号内容(selenium同步单线程)

    专题系列导引   爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集   课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...

  8. Python爬虫【四】爬取PC网页版“微博辟谣”账号内容(selenium多线程异步处理多页面)

    专题系列导引   爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集   课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...

  9. Python爬虫【三】爬取PC网页版“微博辟谣”账号内容(selenium单页面内多线程爬取内容)

    专题系列导引   爬虫课题描述可见: Python爬虫[零]课题介绍 – 对"微博辟谣"账号的历史微博进行数据采集   课题解决方法: 微博移动版爬虫 Python爬虫[一]爬取移 ...

最新文章

  1. C# DataSet与DataTable的区别和用法
  2. 独家 | 每个数据科学家应该知道的五种检测异常值的方法(附Python代码)
  3. 【Java 并发编程】线程简介 ( 原子操作 | volatile 关键字使用场景 )
  4. HDU1978 记忆化搜索
  5. 比特币如何达成共识 - 最长链的选择
  6. 用Java弹出创建新的消息通知
  7. pythonopencv提取圆内图像_python – 使用OpenCV从图像中提取多边形给定...
  8. [转载]带你玩转Visual Studio——带你高效开发
  9. Windows CE的学习路线
  10. 东南亚跨境电商为什么推荐ERP仓储系统?
  11. 8年测试工程师,从“点点点”成长到华为测试主管——我必须告诉你这些......(共勉)
  12. HoverTree.Model.ArticleSelect类的作用
  13. mac pro M1(ARM)安装:VMWare Fusion及linux(centos7/ubuntu)(一)
  14. 智协云店通+BitCOO的4WiN.io全球互贸链 | 翼次元空间+Fund++
  15. Android Glide加载网络图片不显示,但浏览器能打开图片
  16. 2017-2020(4周年)读书年度总结及书单
  17. 【Mybatis从入门到实战教程】第一章 Mybatis 入门
  18. linux堆内存管理
  19. 一个grep使用正则表达式的例子
  20. s18服务器维护,8月11日S15至S18服务器合服公告!

热门文章

  1. 深度解读Facebook刚开源的beringei时序数据库——数据压缩delta of delta+充分利用内存以提高性能...
  2. mongodb分片介绍—— 基于范围(数值型)的分片 或者 基于哈希的分片
  3. Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
  4. 详谈Spring定义
  5. 第六周作业(sticky
  6. js-带操作的赋值表达式
  7. 转:【Java并发编程】之十六:深入Java内存模型——happen-before规则及其对DCL的分析(含代码)...
  8. 第二十一节(数组概要, 一维、二维数组的声明和使用,数组的排序,数组的查找,)...
  9. Asp.net生成Excel文件并下载(解决使用迅雷下载页面而不是文件的问题)
  10. php提供的用户密码加密函数