教你用 Python 來朗讀網頁
是不是有的時候懶得自己看新聞?那麼不妨試試用 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(')
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 = '
>>> 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
可以直接安裝。介面的使用可以參考介面文件:。
使用示例如下:
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)]
2.3 語言檔案合併
我們使用 pydub 來處理生成的音訊檔案。使用 pip install pydub
即可安裝。
另外還 Ubuntu 環境需要安裝依賴的,使用 sudo apt-get install libav-tools
安裝即可,而在 Windows 環境需要到 下載 FFmpeg
,並將其配置到環境變數中。
若還有問題,可以參考官網配置:。
# 合併音訊檔案
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 "
執行後,程式碼就會自動解析網頁並進行朗讀啦。
4 總結
至此,網頁到音訊的轉換就結束了,當然程式沒有這麼完美,比如中英文混合的網頁解析和轉換的結果就不怎麼理想,但是純中文的新聞頁面效果還是不錯的。
原始碼已上傳至 GitHub,後臺回覆「網頁」即可獲取。
原文連結:https://mp.weixin.qq.com/s/-wnWOJxSaoxdpwOqjW9btg
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559358/viewspace-2218229/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 網頁中文字朗讀功能開發實現網頁
- 網頁中文字朗讀功能開發實現分享網頁
- 教你用Xd做網頁網頁
- 簡單的python程式碼實現語音朗讀Python
- 蘋果iPhone螢幕朗讀怎麼關閉?iPhone設定螢幕朗讀方法蘋果iPhone
- 教你用Python爬取圖蟲網Python
- 瘋狂語文朗讀教學法
- CDAM知識點朗讀版-測試
- 閱讀網頁-待清空網頁
- python抓取網頁Python網頁
- 教你用Python實現全自動刷網課Python
- 朗讀在英語教學中的作用
- 教你用python爬蟲爬blibili網站彈幕!Python爬蟲網站
- 如何修改 VoiceOver 朗讀控制元件的順序控制元件
- TTS朗讀中文(using sapi sdk5) (轉)TTSAPI
- 用python怎樣爬網頁呢?其實就是根據URL來獲取它的網頁資訊!Python網頁
- python 網頁文字提取Python網頁
- 兩個可愛語音朗讀軟體,初學者可用來練手。 (3千字)
- 教你用Xtrace讀懂Mantle原始碼原始碼
- 英語全文朗讀軟體---破解 (1千字)
- python如何訪問網頁Python網頁
- python 網頁cookie的使用Python網頁Cookie
- 使用來重新整理網頁效果網頁
- 001-urllib讀取網頁網頁
- [轉]讀取webBrowser中網頁程式碼Web網頁
- Python網頁應用開發神器Dash 2.18.1穩定版本來啦Python網頁
- 網站主頁被篡改了,該如何改回來_主頁被篡改改不回來網站
- 30頁PPT讀懂網際網路保險行業行業
- 怎麼用python扒網頁?Python網頁
- 關於python爬取網頁Python網頁
- python 爬蟲網頁登陸Python爬蟲網頁
- Python 3.2 獲取中文網頁Python網頁
- 使用<meta>來重新整理網頁效果網頁
- 網頁設計的未來在何方?網頁
- 實戰|教你用Python玩轉MysqlPythonMySql
- 實現java讀取網頁內容並下載網頁中出現的圖片Java網頁
- python爬取網頁詳細教程Python網頁
- Python爬蟲之網頁圖片Python爬蟲網頁