Python網(wǎng)頁(yè)正文轉(zhuǎn)換語(yǔ)音文件的操作方法
天氣真的是越來(lái)越冷啦,有時(shí)候我們想翻看網(wǎng)頁(yè)新聞,但是又冷的不想把手拿出來(lái),移動(dòng)鼠標(biāo)翻看。這時(shí)候,是不是特別想電腦像講故事一樣,給我們念出來(lái)呢?人生苦短,我有python啊,試試用 Python 來(lái)朗讀給你聽(tīng)吧。
網(wǎng)頁(yè)轉(zhuǎn)換成語(yǔ)音,步驟無(wú)外乎:
網(wǎng)頁(yè)正文識(shí)別,獲取到正文的文本內(nèi)容;
文本轉(zhuǎn)語(yǔ)音,通過(guò)接口將文本轉(zhuǎn)換成語(yǔ)音文件;
語(yǔ)音文件的發(fā)聲,即將語(yǔ)音文件讀出;
1 網(wǎng)頁(yè)正文識(shí)別
之所以用 Python,就是因?yàn)?Python 有著豐富的庫(kù),網(wǎng)頁(yè)正文識(shí)別也不在話(huà)下。這里用
readability、goose3
1.1 readability
readability 支持 Python3,使用 pip install readability-lxml 安裝即可。
readability 使用起來(lái)也很方便:
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 提取到的正文內(nèi)容不是文本,里面仍包含 HTML 標(biāo)簽。
當(dāng)然也可以結(jié)合其他組件再對(duì) HTML 進(jìn)行處理,如 html2text,我們這里就不再延伸,有興趣的可以自行嘗試。
1.2 goose3
Goose 本來(lái)是一個(gè)用 Java 編寫(xiě)的文章提取器,后來(lái)就有了 Python 實(shí)現(xiàn)版: goose3 。
使用起來(lái)也很方便,同時(shí)對(duì)中文支持也不錯(cuò)。使用 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])
北京時(shí)間6月15日23:00(圣彼得堡當(dāng)?shù)貢r(shí)間18:00),2018年世界杯B組一場(chǎng)比賽在圣彼得堡球場(chǎng)展開(kāi)角逐,伊朗1比0險(xiǎn)勝摩洛哥,伊朗前鋒阿茲蒙半場(chǎng)結(jié)束前錯(cuò)過(guò)單刀機(jī)會(huì),鮑哈杜茲第95分鐘自擺烏
龍。這是伊朗20年來(lái)首度在世界杯決賽圈取勝。
本屆世界杯,既相繼出現(xiàn)替補(bǔ)便進(jìn)球,貼補(bǔ)梅開(kāi)二度以及東道主
可以看出網(wǎng)頁(yè)正文提取效果還不錯(cuò),基本滿(mǎn)足我們的要求,可以使用!
注意:goose 還有另外一個(gè) Python2 的版本:Python-Goose,使用方法和 goose3 基本一樣。
2 文本轉(zhuǎn)語(yǔ)音
文本轉(zhuǎn)語(yǔ)音,百度、阿里、騰訊、訊飛等都有提供 REST API 接口,阿里和騰訊的申請(qǐng)相對(duì)時(shí)間較長(zhǎng),阿里的貌似還要收費(fèi),百度和訊飛的在線(xiàn)申請(qǐng)后即可使用。
沒(méi)辦法,好的東西得來(lái)總是要曲折一些。其中百度的沒(méi)有調(diào)用量的限制(其實(shí)默認(rèn)是 200000 次/天),訊飛有每天 500 次的限制。
這里我們使用百度的 REST API 接口中的語(yǔ)言合成接口,一方面原因是百度的調(diào)用次數(shù)沒(méi)有限制,另一方面,我大致看了下訊飛的接口文檔,接口限制還是比較多的。還有就是百度提供了 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
均可在服務(wù)控制臺(tái)中的應(yīng)用列表中查看。
""" 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, }) # 識(shí)別正確返回語(yǔ)音二進(jìn)制 錯(cuò)誤則返回dict 參照下面錯(cuò)誤碼 if not isinstance(result, dict): with open('auido.mp3', 'wb') as f: f.write(result)
接口參數(shù):
接口對(duì)單次傳入的文本進(jìn)行了限制,合成文本長(zhǎng)度必須小于 1024 字節(jié),如果文本長(zhǎng)度過(guò)長(zhǎng),就需要進(jìn)行切割處理,采用多次請(qǐng)求的方式,分別轉(zhuǎn)換成語(yǔ)音文件,最后再將多個(gè)語(yǔ)音文件合并成一個(gè)。
2.2 文本切割
可以使用如下代碼將文本分割成多個(gè)長(zhǎng)度為 500 的文本列表
# 將文本按 500 的長(zhǎng)度分割成多個(gè)文本 text_list = [text[i:i+500] for i in range(0, len(text), 500)]
我們使用 pydub 來(lái)處理生成的音頻文件。使用 pip install pydub 即可安裝。
另外還 Ubuntu 環(huán)境需要安裝依賴(lài)的,使用 sudo apt-get install libav-tools 安裝即可,而在 Windows 環(huán)境需要到 https://ffmpeg.zeranoe.com/builds/ 下載 FFmpeg,并將其配置到環(huán)境變量中。
若還有問(wèn)題,可以參考官網(wǎng)配置: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") # 刪除臨時(shí)音頻 os.unlink(f) # 導(dǎo)出合并后的音頻文件,格式為MP3格式 file_name = str(uuid.uuid1()) + ".mp3" song.export(file_name, format="mp3") return file_name
通過(guò)百度的接口,我們可以將文字轉(zhuǎn)化成音頻文件,下面的問(wèn)題就是如何播放音頻文件。
3 音頻文件播放
網(wǎng)上獲取到 Python 播放 wav 文件的方式由好幾種,包括 pyaudio、pygame、winsound、playsound。不過(guò)測(cè)試下來(lái),只有 playsound 成功。其他方式有興趣的可以試下,有問(wèn)題可以留言交流。
使用 pip install playsound 安裝后即可使用。
使用也很簡(jiǎn)單
>>> from playsound import playsound >>> playsound('/path/to/a/sound/file/you/want/to/play.mp3')
說(shuō)明:音頻的播放需要在圖形化頁(yè)面下運(yùn)行,因?yàn)槊钚心J较拢瑳](méi)有播放聲音的出口。
python page2voice.py -u https://so.gushiwen.org/shiwenv_c244fc77f6fb.aspx
運(yùn)行后,代碼就會(huì)自動(dòng)解析網(wǎng)頁(yè)并進(jìn)行朗讀啦。
至此,網(wǎng)頁(yè)到音頻的轉(zhuǎn)換就結(jié)束了,當(dāng)然程序沒(méi)有這么完美,比如中英文混合的網(wǎng)頁(yè)解析和轉(zhuǎn)換的結(jié)果就不怎么理想,但是純中文的新聞頁(yè)面效果還是不錯(cuò)的。
總結(jié)
以上所述是小編給大家介紹的Python網(wǎng)頁(yè)正文轉(zhuǎn)換語(yǔ)音文件的操作方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
39條Python語(yǔ)句實(shí)現(xiàn)數(shù)字華容道
這篇文章主要為大家詳細(xì)介紹了39條Python語(yǔ)句實(shí)現(xiàn)數(shù)字華容道,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04Python編程tkinter庫(kù)Canvas實(shí)現(xiàn)涂鴉顏色表及圍棋盤(pán)示例
這篇文章主要為大家介紹了Python編程中如何使用tkinter庫(kù)Canvas來(lái)實(shí)現(xiàn)涂鴉,顏色表及圍棋盤(pán)的示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10分析Python中設(shè)計(jì)模式之Decorator裝飾器模式的要點(diǎn)
這篇文章主要介紹了Python中設(shè)計(jì)模式之Decorator裝飾器模式模式,文中詳細(xì)地講解了裝飾對(duì)象的相關(guān)加鎖問(wèn)題,需要的朋友可以參考下2016-03-03Python操作MySQL數(shù)據(jù)庫(kù)的入門(mén)指南
MySQL是一種關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),廣泛應(yīng)用于各種應(yīng)用程序和網(wǎng)站,在本篇技術(shù)博客中,我們將探討如何使用Python操作MySQL數(shù)據(jù)庫(kù),需要的可以收藏一下2023-06-06Python讀取Json字典寫(xiě)入Excel表格的方法
這篇文章主要為大家詳細(xì)介紹了Python讀取Json字典寫(xiě)入Excel表格的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01python使用turtle庫(kù)繪制奧運(yùn)五環(huán)
turtle也叫海龜,是turtle繪圖體系的python實(shí)現(xiàn),這篇文章主要介紹了python使用turtle庫(kù)繪制奧運(yùn)五環(huán),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-02-02利用Anaconda創(chuàng)建虛擬環(huán)境的全過(guò)程
因?yàn)槎啻沃匦屡渲铆h(huán)境,這些命令每次都要用,每次都忘記,需要重新搜索,所以記錄這一過(guò)程,下面這篇文章主要給大家介紹了關(guān)于利用Anaconda創(chuàng)建虛擬環(huán)境的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07Django實(shí)現(xiàn)下載超大CSV文件的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用 Django 進(jìn)行大型 CSV 文件的流傳輸,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-01-01