python抓取網(wǎng)頁(yè)內(nèi)容并進(jìn)行語(yǔ)音播報(bào)的方法
python2.7,下面是跑在window上的,稍作修改就可以跑在linux上。
實(shí)測(cè)win7和raspbian均可,且raspbian可以直接調(diào)用omxplayer命令進(jìn)行播放。
利用百度的語(yǔ)音合成api進(jìn)行語(yǔ)音播報(bào),抓取的頁(yè)面是北大未名BBS的十大。
先放抓取模塊BDWM.py的代碼:
# -*- coding: utf-8 -*- import urllib2 import HTMLParser class MyParser(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 = '' def handle_starttag(self, tag, attrs): if tag == 'span': for key, value in attrs: if key == 'class' and ('Rank1AmongHisBoard' in value): self.count += 1 if self.count < 11: self.flag = True if tag == 'a': self.isLink = True else: self.isLink = False def handle_data(self, data): if self.flag and self.isLink: self.count2 += 1 if self.count2 == 1: self.temp = data if self.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') for i in my.dict: result += i + str + my.dict[i] + '\n' print result
F5運(yùn)行,抓取結(jié)果如下:
>>> ======================= RESTART =======================
>>>
化學(xué)與分子工程學(xué)院 版 不喜歡做實(shí)驗(yàn)怎么辦
三角地 版 烈士旅正在對(duì)對(duì)研究生會(huì)實(shí)施最高軍事占領(lǐng)的
十六周年站慶 版 ★★畢業(yè)季 | 未名BBS歷年紀(jì)念品特賣會(huì)★★
遺跡保衛(wèi) 版 母校兩日游,想借個(gè)飯卡
別問(wèn)我是誰(shuí) 版 遇到性騷擾,打電話跟男朋友傾訴……
美食天地 版 請(qǐng)問(wèn)北大附近哪里有好吃的餃子
男孩子 版 ,萬(wàn)念俱灰!
鵲橋 版 醫(yī)生mm征GG(#征男友#代征)
談情說(shuō)愛(ài) 版 # 感覺(jué)身邊都是嘴上急著但心里不急的人 #
北京大學(xué)研究生會(huì) 版 農(nóng)園一層和自稱“常代會(huì)”的占座女吵起來(lái)了(轉(zhuǎn)載)(轉(zhuǎn)載)
可以看到我們成功抓取到了未名BBS十大的版面信息與標(biāo)題。
下面放語(yǔ)音播報(bào)模塊,也是整個(gè)程序的入口:
# -*- coding: utf-8 -*- ''' Author : Peizhong Ju Latest Update : 2016/4/21 Function : Use Baidu Voice API to speak ''' import urllib, urllib2 import json import ConfigParser import BDWM config = ConfigParser.ConfigParser() config.readfp(open('config.ini')) TOKEN = config.get('Baidu', 'token') local = config.get('Dir', 'mp3') words = '' def GetVoice(): 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() def GetAccessToken(): 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()) return hjson['access_token'] def CheckError(): global TOKEN file_object = open(local) try: all_the_text = file_object.read() if (all_the_text[0] == '{'): hjson = json.loads(all_the_text) #print hjson['err_no'] if (hjson['err_no'] == 502): print 'Getting new access token...' TOKEN = GetAccessToken() config.set('Baidu', 'token', TOKEN) config.write(open('config.ini', "r+")) GetVoice() else: print all_the_text else: print '[success] ' + words finally: file_object.close() try: words = BDWM.result.encode('utf8') GetVoice() # use other software to play it except Exception as e: print "ERROR!" print e
當(dāng)中我們用到了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抓取網(wǎng)頁(yè)內(nèi)容并進(jìn)行語(yǔ)音播報(bào)的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- python實(shí)現(xiàn)守護(hù)進(jìn)程、守護(hù)線程、守護(hù)非守護(hù)并行
- Python中使用多進(jìn)程來(lái)實(shí)現(xiàn)并行處理的方法小結(jié)
- python開(kāi)啟多個(gè)子進(jìn)程并行運(yùn)行的方法
- python如何爬取網(wǎng)站數(shù)據(jù)并進(jìn)行數(shù)據(jù)可視化
- python 判斷l(xiāng)inux進(jìn)程,并殺死進(jìn)程的實(shí)現(xiàn)方法
- 在python中獲取div的文本內(nèi)容并和想定結(jié)果進(jìn)行對(duì)比詳解
- Python并發(fā)之多進(jìn)程的方法實(shí)例代碼
- python多進(jìn)程并行代碼實(shí)例
相關(guān)文章
Python編程實(shí)現(xiàn)使用線性回歸預(yù)測(cè)數(shù)據(jù)
這篇文章主要介紹了Python編程實(shí)現(xiàn)使用線性回歸預(yù)測(cè)數(shù)據(jù),具有一定借鑒價(jià)值,需要的朋友可以了解下。2017-12-12Python實(shí)現(xiàn)獲取亂序列表排序后的新下標(biāo)的示例
本文主要介紹了Python實(shí)現(xiàn)獲取亂序列表排序后的新下標(biāo)的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04Python對(duì)字符串實(shí)現(xiàn)去重操作的方法示例
字符串去重是python中字符串操作常見(jiàn)的一個(gè)需求,最近在工作中就又遇到了,所以下面這篇文章主要給大家介紹了關(guān)于Python對(duì)字符串實(shí)現(xiàn)去重操作的相關(guān)資料,文中給出了詳細(xì)的介紹,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-08-08詳解Python3 定義一個(gè)跨越多行的字符串的多種方法
這篇文章主要介紹了詳解Python3 定義一個(gè)跨越多行的字符串的多種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Python異步發(fā)送日志到遠(yuǎn)程服務(wù)器詳情
這篇文章主要介紹了Python異步發(fā)送日志到遠(yuǎn)程服務(wù)器詳情,文章通過(guò)簡(jiǎn)單輸出到cmd和文件中的代碼展開(kāi)詳情,需要的朋友可以參考一下2022-07-07python基礎(chǔ)教程之基本內(nèi)置數(shù)據(jù)類型介紹
在Python程序中,每個(gè)數(shù)據(jù)都是對(duì)像,每個(gè)對(duì)像都有自己的一個(gè)類型。不同類型有不同的操作方法,使用內(nèi)置數(shù)據(jù)類型獨(dú)有的操作方法,可以更快的完成很多工作2014-02-02python中閉包Closure函數(shù)作為返回值的方法示例
閉包(closure)是函數(shù)式編程的重要的語(yǔ)法結(jié)構(gòu),Python也支持這一特性,下面這篇文章主要給大家介紹了關(guān)于python中閉包Closure函數(shù)作為返回值的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。2017-12-12Python搭建代理IP池實(shí)現(xiàn)存儲(chǔ)IP的方法
這篇文章主要介紹了Python搭建代理IP池實(shí)現(xiàn)存儲(chǔ)IP的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10優(yōu)化Python代碼使其加快作用域內(nèi)的查找
這篇文章主要介紹了優(yōu)化Python代碼使其加快作用域內(nèi)的搜索,文中介紹了CPython相關(guān)的C代碼來(lái)對(duì)查找功能進(jìn)行優(yōu)化,加快搜索的速度,需要的朋友可以參考下2015-03-03