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 相关文章推荐
Python3里的super()和__class__使用介绍
Apr 23 Python
Python基于Tkinter的HelloWorld入门实例
Jun 17 Python
浅谈编码,解码,乱码的问题
Dec 30 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
Python动刷新抢12306火车票的代码(附源码)
Jan 24 Python
django2用iframe标签完成网页内嵌播放b站视频功能
Jun 20 Python
详解Python安装scrapy的正确姿势
Jun 26 Python
Python设计模式之模板方法模式实例详解
Jan 17 Python
python科学计算之scipy——optimize用法
Nov 25 Python
Python Numpy 自然数填充数组的实现
Nov 28 Python
python的列表List求均值和中位数实例
Mar 03 Python
Django用户认证系统如何实现自定义
Nov 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设计聊天室步步通
2006/10/09 PHP
PHP中strtotime函数使用方法详解
2011/11/27 PHP
PHP 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
Centos6.5和Centos7 php环境搭建方法
2016/05/27 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
Javascript代码混淆综合解决方案-Javascript在线混淆器
2006/12/18 Javascript
Iframe 自动适应页面的高度示例代码
2014/02/26 Javascript
PHPExcel中的一些常用方法汇总
2015/01/23 Javascript
jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
2016/06/02 Javascript
详细谈谈AngularJS的子级作用域问题
2016/09/05 Javascript
vue.js模仿京东省市区三级联动的选择组件实例代码
2017/11/22 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
Python标准库shutil用法实例详解
2018/08/13 Python
python编程使用协程并发的优缺点
2018/09/20 Python
centos7之Python3.74安装教程
2019/08/15 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
python能做哪些生活有趣的事情
2020/09/09 Python
python中lower函数实现方法及用法讲解
2020/12/23 Python
信息学院毕业生自荐信范文
2014/03/04 职场文书
初一学生期末评语
2014/04/24 职场文书
检讨书范文2000字
2015/01/28 职场文书
2015年效能监察工作总结
2015/04/23 职场文书
消防演习通知
2015/04/25 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
2016年“5.12”护士节致辞
2015/07/31 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
公证书
2019/04/17 职场文书
Java 轮询锁使用时遇到问题
2022/05/11 Java/Android