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 相关文章推荐
python通过wxPython打开一个音频文件并播放的方法
Mar 25 Python
基于Python实现一个简单的银行转账操作
Mar 06 Python
Python的Flask框架中的Jinja2模板引擎学习教程
Jun 30 Python
Python RabbitMQ消息队列实现rpc
May 30 Python
Python元组常见操作示例
Feb 19 Python
python列表,字典,元组简单用法示例
Jul 11 Python
Python 3 判断2个字典相同
Aug 06 Python
Python 使用matplotlib模块模拟掷骰子
Aug 08 Python
python django 原生sql 获取数据的例子
Aug 14 Python
浅谈对pytroch中torch.autograd.backward的思考
Dec 27 Python
Python捕获异常堆栈信息的几种方法(小结)
May 18 Python
Python安装使用Scrapy框架
Apr 12 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
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
PHP实现的简单适配器模式示例
2017/06/22 PHP
Yii 框架使用Forms操作详解
2020/05/18 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
2008/03/22 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
JS实现静止元素自动移动示例
2014/04/14 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
JS动态添加Table的TR,TD实现方法
2015/01/28 Javascript
jQuery代码实现发展历程时间轴特效
2015/07/30 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
vue弹窗消息组件的使用方法
2020/09/24 Javascript
Vue父子组件双向绑定传值的实现方法
2018/07/31 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
[02:53]2018年度DOTA2最佳战队-完美盛典
2018/12/17 DOTA
通过C++学习Python
2015/01/20 Python
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
Python解析并读取PDF文件内容的方法
2018/05/08 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
详解python的argpare和click模块小结
2019/03/31 Python
图解python全局变量与局部变量相关知识
2019/11/02 Python
Ellesse英国官网:意大利高级运动品牌
2019/07/23 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
what is the difference between ext2 and ext3
2015/08/25 面试题
Linux开机引导的步骤是什么
2015/10/19 面试题
Servlet的生命周期
2013/08/25 面试题
工厂保洁员岗位职责
2013/12/04 职场文书
银行简历自我评价
2014/02/11 职场文书
手术室护士节演讲稿
2014/08/27 职场文书
泰山导游词
2015/02/02 职场文书
听证通知书
2015/04/24 职场文书
公安干警正风肃纪心得体会
2016/01/15 职场文书
Javascript webpack动态import
2022/04/19 Javascript