Python版本: anaconda3 python3.7.4
操做系統: Ubuntu19.10
編譯器: pycharm社區版
用到的模塊: pyttsx3,requestshtml
pyttsx3官網地址
pyttsx3(Text to Speech)是一個語音轉換模塊,它能夠在離線的環境下工做,支持多個引擎,並且兼容於Python2和Python3.python
pip install pyttsx3
(Windows系統)若你沒有安裝pywin32模塊,則還需安裝此模塊做爲pyttsx3模塊的依賴
安裝pywin32api
pip install pywin32
這個模塊很奇怪,下載的過程當中常常會報錯,試了幾臺電腦和不一樣操做系統的結果也是同樣,在檢查網絡和其餘因素無誤後多試幾回就能夠成功安裝此模塊.
安裝成功提示以下圖
注意:這個模塊運行必須在python3.7.4版本及如下才能夠運行,不然會因爲版本太高報錯
若是不知道本身的Python版本是多少,能夠再終端輸入
根據官網給出的簡單示範,咱們能夠測試一下是否能夠使用本模塊
測試代碼:網絡
import pyttsx3 engine = pyttsx3.init() engine.say("I will speak this text") engine.runAndWait()
若能夠聽到一個男聲快速的說了一遍咱們引用的句子,則證實本模塊安裝已經成功函數
也是參照官方文檔,將這些參數調整成一個比較舒服的狀態測試
import pyttsx3 engine = pyttsx3.init() # 建立對象 """ 語速 """ rate = engine.getProperty('rate') # 獲取當前語速(默認值) print (rate) # 打印當前語速(默認值) engine.setProperty('rate', 175) # 設置一個新的語速 """音量""" volume = engine.getProperty('volume') # 獲取當前的音量 (默認值)(min=0 and max=1) print (volume) # 打印當前音量(默認值) engine.setProperty('volume',1.0) # 設置一個新的音量(0 < volume < 1) """音色""" voices = engine.getProperty('voices') # 獲取當前的音色信息 engine.setProperty('voice', voices[0].id) # 改變中括號中的值,0爲男性,1爲女性 engine.say("Hello World!") engine.runAndWait() engine.stop()
在Windows系統中,這一段代碼已經能夠經過pyttsx3模塊說出中文了,可是在Linux操做系統中,還須要修改一個參數網站
engine.setProperty('voice','zh') //將音色中修改音色的語句替換
經過剛纔對pyttsx模塊的講解,咱們已經能夠了解到該模塊的基本原理以及各個參數所表明的含義,接下來咱們就以pyttsx3模塊爲基礎構建一個簡單的有聲小說.this
使用爬蟲requests模塊將小說文本從從網上下載到本地,並將內容保存在一個文本文件中,而後打開文本文件,調用pyttsx3模塊對文字進行識別,並朗讀出來.人工智能
首先找到一個小說網站(我選擇的是新筆趣閣小說網 由於這個網站沒有設置反爬機制 比較適合咱們練手)
而後隨便找到一個小說,進入它的目錄頁,藉助谷歌瀏覽器的插件xpath helper利用xpath語法提取到每一章小說
點進小說的內容頁,一樣利用插件提取到內容
而後就能夠開始構建爬取小說的代碼了
爲了節省時間,我先簡單的爬取一個章節
import requests from lxml import etree def main(): #小說的詳情頁 url = 'http://www.xbiquge.la/10/10489/' #請求內容 response = requests.get(url).text #轉化成xpath語法能夠提取的形式 html = etree.HTML(response) #提取小說內容頁的網址 data = html.xpath("//div[@class='box_con'][2]/div[@id='list']/dl/dd/a/@href") #爲了節省時間,先只提取一個章節的內容 sound = data[1] #構造小說內容頁的網址 new_url = 'http://www.xbiquge.la' + str(sound) #請求 response_1 = requests.get(new_url).content html_1 = etree.HTML(response_1) data_1 = html_1.xpath("//div[@id='content']/text()") #用replace方法將提取到文本中的\xa0替換掉 noval = str(data_1).replace('\\xa0', '') #替換掉\r noval_1 = noval.replace("\\r',", '') #將爬取到的小說內容存儲到文本文件中 with open('xiaoshuo.txt','w') as f: f.write(noval_1) if __name__ == '__main__': main()
運行完成以後,就能夠發現當前文件夾下多出了一個名爲xiaoshuo.txt的文件,這就是咱們爬取到的小說內容
def say(filename='xiaoshuo.txt'): with open(filename, 'r') as f: line = f.read() engine = pyttsx3.init() engine.setProperty('volume',1.0) engine.setProperty('rate', 175) engine.setProperty('voice', 'zh') engine.say(line) engine.runAndWait()
最後再設置一個能夠選擇章節的接口傳入主函數,運行程序便可聽到有聲小說的內容
import requests from lxml import etree import pyttsx3 def main(a): #小說的詳情頁 url = 'http://www.xbiquge.la/10/10489/' #請求內容 response = requests.get(url).text #轉化成xpath語法能夠提取的形式 html = etree.HTML(response) #提取小說內容頁的網址 data = html.xpath("//div[@class='box_con'][2]/div[@id='list']/dl/dd/a/@href") #爲了節省時間,先只提取一個章節的內容 sound = data[int(a)] #構造小說內容頁的網址 new_url = 'http://www.xbiquge.la' + str(sound) #請求 response_1 = requests.get(new_url).content html_1 = etree.HTML(response_1) data_1 = html_1.xpath("//div[@id='content']/text()") #用replace方法將提取到文本中的\xa0替換掉 noval = str(data_1).replace('\\xa0', '') #替換掉\r noval_0 = noval.replace("\\r',", '') noval_1 = noval_0.replace('[', '') #將爬取到的小說內容存儲到文本文件中 with open('xiaoshuo.txt','w') as f: f.write(noval_1) def say(filename='xiaoshuo.txt'): with open(filename, 'r') as f: line = f.read() engine = pyttsx3.init() engine.setProperty('volume',1.0) engine.setProperty('rate', 175) engine.setProperty('voice', 'zh') engine.say(line) engine.runAndWait() if __name__ == '__main__': a = input('輸入想要朗讀的章節(數字):') main(a) say()
等你運行完這個程序,你就會發現機器人的聲音實在是太難聽了.若是想要作更加清晰的有聲小說,能夠調用百度人工智能的api接口來實現這個功能