每日新闻人声朗读器
做這個東西的初衷就是每天早上準備開始干活之前可以關注一下國內外的安全消息,同時最好是有聲的。
但是出現了一個問題,😂網頁改版了。?
整體實現流程
url:https://www.securityweek.com/
注:需要開代理
1.python爬蟲獲取安全頭條,同時捕捉具體內容的url
from bs4 import BeautifulSoup import requests import get_chheader = {} def geturl():url="https://www.securityweek.com"html=requests.get(url=url)soup=BeautifulSoup(html.text,features="html.parser")conturls=[]for i in range(1,6):selectresult=soup.select(".panel-pane.pane-block.pane-views-lastest-security-block-1")[0].findAll("a")[i].attrs["href"]conturl=url+selectresult#print(conturl)conturls.append(conturl)return conturlsdef getcontent(url):header={}html=requests.get(url=url)#print(html.text)soup=BeautifulSoup(html.text,features="html.parser")contents=["title"]for content in soup.select("div.content.clear-block")[0].findAll("p"):#print(content.text)contents.append(content.text)return contentsfor url in geturl():#加入多線程print(url)#print(getcontent(url))優(yōu)化建議:加入多線程(這里優(yōu)化的意義其實不大,因為量少)?,本來是提醒自己要做的,但是放假了/doge,忘了,回來以后發(fā)現網頁改版了😭,需要重寫部分代碼。懶得搞了。等找到好一點的語音合成再做。
2.bs4庫解析獲取內容
import requests from bs4 import BeautifulSoupdef getcontent(url):header={}html=requests.get(url=url)#print(html.text)soup=BeautifulSoup(html.text,features="html.parser")contents=["title"]for content in soup.select("div.content.clear-block")[0].findAll("p"):#print(content.text)contents.append(content.text)return contentsif __name__=="__main__":#調用列表進行操作url = "https://www.securityweek.com/xdr-and-age-old-problem-alert-fatigue"print(getcontent(url)[6])這一段當時放在了第一步,但是后來想著做通用型的,又把它拆開了。。。?
3.調用百度的翻譯api進行翻譯
import requests import hashlib import json from getthings import * import redef md5(str):#MD5加密# 待加密信息# 創(chuàng)建md5對象hl = hashlib.md5()hl.update(str.encode(encoding='utf-8'))# print('MD5加密前為 :' + str)# print('MD5加密后為 :' + hl.hexdigest())sign=hl.hexdigest()return signdef trans(content):'''q=要翻譯的東西from=ento=zhappid=xxxxxxsalt=xxxxxx平臺分配的密鑰:xxxxxxxx'''q=contentget_from="en"to="zh"appid="xxxxxxx"salt="xxxxx"key="xxxxxxx"str=appid+q+salt+keysign=md5(str)#print(sign)url="http://api.fanyi.baidu.com/api/trans/vip/translate?q="+q+"&from=en&to=zh&appid="+appid+"&salt="+salt+"&sign="+sign#print(len(url))html=requests.get(url=url)#print(html.text)content_ch=html.json()['trans_result'][0]["dst"]return content_chdef trans_page(url):cout=0content_chs=[]for content_en in getcontent(url):cout+=1try:print(trans(content_en))content_ch=trans(content_en)content_chs.append(content_ch)except KeyError:content_en = re.sub(string=content_en, pattern="&", repl="")print(trans(content_en))content_ch=trans(content_en)content_chs.append(content_ch)# print(cout)# print("_________error________________\n")return content_chsif __name__=="__main__":# url = "https://www.securityweek.com/xdr-and-age-old-problem-alert-fatigue"# cout = 0# for content_en in getcontent.getcontent(url):# cout += 1# try:# print(trans(content_en))# except KeyError:# content = re.sub(string=content_en, pattern="&", repl="")# # print(cout)# # print("_________error________________\n")#獲取資源并且轉換為中文cout=0for url in geturl():cout+=1print(trans_page(url))with open(str(cout)+'.txt', 'a', encoding='utf-8') as f:for con in trans_page(url):print(con)f.write(con)f.close()這里按照百度的api文檔進行調用操作就可以了,有一個符號坑了我半個小時,就是&記得替換掉。
4.使用pyttsx3進行語音合成(實話,效果不咋好。)
import pyttsx3# 初始化獲取語音引擎 speaker = pyttsx3.init() def get_mp3(text,i):# 提取文本#text ="這就很ok"# 去掉文本中的換行符cleaned_text = text.strip().replace('\n',' ')# 調整人聲類型# voices = speaker.getProperty('voices')# speaker.setProperty('voice', voices[5].id)# 調整語速rate = speaker.getProperty('rate')speaker.setProperty('rate', 200)# 調整聲量volume = speaker.getProperty('volume')speaker.setProperty('volume', 1)# 將格式為mp3的音頻保存speaker.save_to_file(cleaned_text,'./paper'+str(i)+'.mp3')speaker.runAndWait()speaker.stop()#獲取名字 for i in range(1,6):with open(str(i)+".txt","r") as f:text=f.read()get_mp3(text,i)print(text)f.close()朗讀中文我換了好幾個人聲都不行,好像最后只有默認的可以讀中文。。。
5.上傳mp3到服務器
兩個辦法
1.sshpass?
2.密鑰文件
總結
- 上一篇: 张老师的生日是哪一天?
- 下一篇: C/C++后端开发学习路线总结(附带实习