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 05 Python
python目录操作之python遍历文件夹后将结果存储为xml
Jan 27 Python
Python跳出循环语句continue与break的区别
Aug 25 Python
Python中用startswith()函数判断字符串开头的教程
Apr 07 Python
Python单元测试框架unittest使用方法讲解
Apr 13 Python
python分割列表(list)的方法示例
May 07 Python
深入浅析Python中的yield关键字
Jan 24 Python
Python 微信之获取好友昵称并制作wordcloud的实例
Feb 21 Python
Python3 tkinter 实现文件读取及保存功能
Sep 12 Python
python-视频分帧&amp;多帧合成视频实例
Dec 10 Python
使用Python测试Ping主机IP和某端口是否开放的实例
Dec 17 Python
Jupyter notebook运行Spark+Scala教程
Apr 10 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入门学习的几个不错的实例代码
2008/07/13 PHP
php中json_decode()和json_encode()的使用方法
2012/06/04 PHP
解析php 版获取重定向后的地址(代码)
2013/06/26 PHP
php中实现用数组妩媚地生成要执行的sql语句
2015/07/10 PHP
PHP中session跨子域的三种实现方法
2016/07/25 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
php layui实现前端多图上传实例
2019/07/30 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
用cssText批量修改样式
2009/08/29 Javascript
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
JS Replace 全部替换字符的用法小结
2013/12/24 Javascript
JS 使用for循环遍历子节点查找元素
2014/09/06 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
js实现缓冲运动效果的方法
2015/04/10 Javascript
老生常谈遮罩层 滚动条的问题
2016/04/29 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
Bootstrap基本插件学习笔记之折叠(22)
2016/12/08 Javascript
canvas简单快速的实现知乎登录页背景效果
2017/05/08 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
2020/05/30 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
微信小程序实现的picker多级联动功能示例
2019/05/23 Javascript
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
微信小程序canvas开发水果老虎机的思路详解
2020/02/07 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
python使用正则表达式匹配字符串开头并打印示例
2017/01/11 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
python 实现调用子文件下的模块方法
2018/12/07 Python
《盲人摸象》教学反思
2014/02/16 职场文书
售房委托书
2014/08/30 职场文书
民事答辩状范本
2015/05/21 职场文书
2015初中团支部工作总结
2015/07/21 职场文书