python抓取网页内容并进行语音播报的方法
python2.7,下面是跑在window上的,稍作修改就可以跑在linux上。
实测win7和raspbian均可,且raspbian可以直接调用omxplayer命令进行播放。
利用百度的语音合成api进行语音播报,抓取的页面是北大未名BBS的十大。
先放抓取模块BDWM.py的代码:
#-*-coding:utf-8-*-
importurllib2
importHTMLParser
classMyParser(HTMLParser.HTMLParser):
def__init__(self):
HTMLParser.HTMLParser.__init__(self)
self.nowtag=''
self.count=0
self.flag=False
self.isLink=False
self.count2=0
self.dict={}
self.temp=''
defhandle_starttag(self,tag,attrs):
iftag=='span':
forkey,valueinattrs:
ifkey=='class'and('Rank1AmongHisBoard'invalue):
self.count+=1
ifself.count<11:
self.flag=True
iftag=='a':
self.isLink=True
else:
self.isLink=False
defhandle_data(self,data):
ifself.flagandself.isLink:
self.count2+=1
ifself.count2==1:
self.temp=data
ifself.count2==3:
self.flag=False
self.count2=0
self.dict[self.temp]=data
res=urllib2.urlopen('https://www.bdwm.net/bbs/main0.php')
my=MyParser()
my.feed(res.read().decode("gbk"))
result=''
str="版"
str=str.decode('utf8')
foriinmy.dict:
result+=i+str+my.dict[i]+'\n'
printresult
F5运行,抓取结果如下:
>>>=======================RESTART=======================
>>>
化学与分子工程学院版不喜欢做实验怎么办
三角地版烈士旅正在对对研究生会实施最高军事占领的
十六周年站庆版★★毕业季|未名BBS历年纪念品特卖会★★
遗迹保卫版母校两日游,想借个饭卡
别问我是谁版遇到性骚扰,打电话跟男朋友倾诉……
美食天地版请问北大附近哪里有好吃的饺子
男孩子版被戴绿帽,万念俱灰!
鹊桥版医生mm征GG(#征男友#代征)
谈情说爱版#感觉身边都是嘴上急着脱光但心里不急的人#
北京大学研究生会版农园一层和自称“常代会”的占座女吵起来了(转载)(转载)
可以看到我们成功抓取到了未名BBS十大的版面信息与标题。
下面放语音播报模块,也是整个程序的入口:
#-*-coding:utf-8-*-
'''
Author:PeizhongJu
LatestUpdate:2016/4/21
Function:UseBaiduVoiceAPItospeak
'''
importurllib,urllib2
importjson
importConfigParser
importBDWM
config=ConfigParser.ConfigParser()
config.readfp(open('config.ini'))
TOKEN=config.get('Baidu','token')
local=config.get('Dir','mp3')
words=''
defGetVoice():
text=urllib.quote(words)
url='http://tsn.baidu.com/text2audio?tex='+text+'&cuid=b888e32e868c&lan=zh&ctp=1&tok='+TOKEN
rep=urllib.urlretrieve(url,local)
CheckError()
defGetAccessToken():
client_id=config.get('Baidu','client_id')
client_secret=config.get('Baidu','client_secret')
rep=urllib2.urlopen('https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id='+client_id+'&client_secret='+client_secret)
hjson=json.loads(rep.read())
returnhjson['access_token']
defCheckError():
globalTOKEN
file_object=open(local)
try:
all_the_text=file_object.read()
if(all_the_text[0]=='{'):
hjson=json.loads(all_the_text)
#printhjson['err_no']
if(hjson['err_no']==502):
print'Gettingnewaccesstoken...'
TOKEN=GetAccessToken()
config.set('Baidu','token',TOKEN)
config.write(open('config.ini',"r+"))
GetVoice()
else:
printall_the_text
else:
print'[success]'+words
finally:
file_object.close()
try:
words=BDWM.result.encode('utf8')
GetVoice()
#useothersoftwaretoplayit
exceptExceptionase:
print"ERROR!"
printe
当中我们用到了config文件,便于记录和修改,格式如下:
[Baidu] client_id=HWWuh7dee6EBSAvzrOGaGNvX client_secret=G3PwLHC5aCN2TQn3GcYjhn3BmH6xgxtR token=24.533d59e6554d133ea6bf02125bc6fa30.2592000.1463760851.282335-5802050 [Dir] mp3=C:\Users\jupeizhong\Desktop\python2\baiduVoice\hello.mp3
其中token是由程序生成的。
以上这篇python抓取网页内容并进行语音播报的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。