python抓取网页内容并进行语音播报的方法


Posted in Python onDecember 24, 2018

python2.7,下面是跑在window上的,稍作修改就可以跑在linux上。

实测win7和raspbian均可,且raspbian可以直接调用omxplayer命令进行播放。

利用百度的语音合成api进行语音播报,抓取的页面是北大未名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运行,抓取结果如下:

>>> ======================= RESTART =======================
>>>
化学与分子工程学院 版 不喜欢做实验怎么办
三角地 版 烈士旅正在对对研究生会实施最高军事占领的
十六周年站庆 版 ★★毕业季 | 未名BBS历年纪念品特卖会★★
遗迹保卫 版 母校两日游,想借个饭卡
别问我是谁 版 遇到性骚扰,打电话跟男朋友倾诉……
美食天地 版 请问北大附近哪里有好吃的饺子
男孩子 版 被戴绿帽,万念俱灰!
鹊桥 版 医生mm征GG(#征男友#代征)
谈情说爱 版 # 感觉身边都是嘴上急着脱光但心里不急的人 #
北京大学研究生会 版 农园一层和自称“常代会”的占座女吵起来了(转载)(转载)

可以看到我们成功抓取到了未名BBS十大的版面信息与标题。

下面放语音播报模块,也是整个程序的入口:

# -*- 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

当中我们用到了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抓取网页内容并进行语音播报的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
Apr 09 Python
python 解析html之BeautifulSoup
Jul 07 Python
python计算圆周长、面积、球体体积并画出圆
Apr 08 Python
10款最好的Web开发的 Python 框架
Mar 18 Python
python开发之函数定义实例分析
Nov 12 Python
Python+微信接口实现运维报警
Aug 27 Python
python多维数组切片方法
Apr 13 Python
pyqt5 实现多窗口跳转的方法
Jun 19 Python
详解从Django Allauth中进行登录改造小结
Dec 18 Python
django处理select下拉表单实例(从model到前端到post到form)
Mar 13 Python
史上最详细的Python打包成exe文件教程
Jan 17 Python
如何使用Tkinter进行窗口的管理与设置
Jun 30 Python
解决pyttsx3无法封装的问题
Dec 24 #Python
pyttsx3实现中文文字转语音的方法
Dec 24 #Python
python实现flappy bird游戏
Dec 24 #Python
Python爬虫实现获取动态gif格式搞笑图片的方法示例
Dec 24 #Python
python 在屏幕上逐字显示一行字的实例
Dec 24 #Python
python之Flask实现简单登录功能的示例代码
Dec 24 #Python
python实现逐个读取txt字符并修改
Dec 24 #Python
You might like
2020最新CPU的性能排名
2020/04/02 数码科技
discuz Passport 通行证 整合笔记
2008/06/30 PHP
js 动态添加标签(新增一行,其实很简单,就是几个函数的应用)
2009/03/26 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
json传值以及ajax接收详解
2016/05/24 Javascript
Javascript下拉刷新的简单实现
2017/02/14 Javascript
jQuery实现的手风琴侧边菜单效果
2017/03/29 jQuery
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
Vue中计算属性computed的示例解读
2017/07/26 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
详解Webpack loader 之 file-loader
2018/11/07 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
详解numpy的argmax的具体使用
2019/05/27 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
为智能设备设计个性化保护套网站:caseable
2017/01/05 全球购物
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
ktv中秋节活动方案
2014/01/30 职场文书
小学生保护环境倡议书
2014/05/15 职场文书
火灾现场处置方案
2014/05/28 职场文书
2014年度党员自我评议
2014/09/13 职场文书
项目战略合作意向书
2015/05/08 职场文书
费用申请报告范文
2015/05/15 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
总结python多进程multiprocessing的相关知识
2021/06/29 Python
JavaWeb Servlet实现网页登录功能
2021/07/04 Java/Android