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实现的数据结构与算法之快速排序详解
Apr 22 Python
CentOS安装pillow报错的解决方法
Jan 27 Python
Python实现图片尺寸缩放脚本
Mar 10 Python
python操作excel的包(openpyxl、xlsxwriter)
Jun 11 Python
对python函数签名的方法详解
Jan 22 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
Aug 31 Python
python函数修饰符@的使用方法解析
Sep 02 Python
详解python 中in 的 用法
Dec 12 Python
opencv+python实现均值滤波
Feb 19 Python
Python操控mysql批量插入数据的实现方法
Oct 27 Python
python des,aes,rsa加解密的实现
Jan 16 Python
python 对xml解析的示例
Feb 27 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 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
2014/06/12 PHP
Laravel学习教程之本地化模块
2017/08/18 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
基于jQuery的的一个隔行变色,鼠标移动变色的小插件
2010/07/06 Javascript
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
2013/04/26 Javascript
jQuery实现类似淘宝购物车全选状态示例
2013/06/26 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
浅析JQuery UI Dialog的样式设置问题
2013/12/18 Javascript
json字符串之间的相互转换示例代码
2014/08/21 Javascript
详解JavaScript中的forEach()方法的使用
2015/06/08 Javascript
简介JavaScript中的push()方法的使用
2015/06/09 Javascript
jquery的幻灯片图片切换效果代码分享
2015/09/07 Javascript
JS日期对象简单操作(获取当前年份、星期、时间)
2016/10/26 Javascript
Angular 4.x 路由快速入门学习
2017/05/03 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
浅谈Node模块系统及其模式
2017/11/17 Javascript
使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能
2017/11/27 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
Python利用前序和中序遍历结果重建二叉树的方法
2016/04/27 Python
Python文件夹与文件的相关操作(推荐)
2016/07/25 Python
python连接mysql实例分享
2016/10/09 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
2017/11/17 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
python中append实例用法总结
2019/07/30 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
迪奥美国官网:Dior美国
2019/12/07 全球购物
职业教育毕业生求职信
2013/11/09 职场文书
日语专业求职信
2014/07/04 职场文书
研究生简历自我评
2015/03/11 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
springboot拦截器无法注入redisTemplate的解决方法
2021/06/27 Java/Android
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers