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 Django做网页
Nov 04 Python
python实现bitmap数据结构详解
Feb 17 Python
进一步理解Python中的函数编程
Apr 13 Python
Python实现计算文件夹下.h和.cpp文件的总行数
Apr 23 Python
python操作 hbase 数据的方法
Dec 18 Python
Python 爬虫之Beautiful Soup模块使用指南
Jul 05 Python
python模拟登陆,用session维持回话的实例
Dec 27 Python
python set集合使用方法解析
Nov 05 Python
Python3实现监控新型冠状病毒肺炎疫情的示例代码
Feb 13 Python
Python读取VOC中的xml目标框实例
Mar 10 Python
python中函数返回多个结果的实例方法
Dec 16 Python
python opencv将多个图放在一个窗口的实例详解
Feb 28 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 Memcached应用实现代码
2010/02/08 PHP
php实现获取文章内容第一张图片的方法
2014/11/04 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
js里的prototype使用示例
2010/11/19 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
javascript中动态加载js文件多种解决办法总结
2013/11/15 Javascript
使用Sticker.js实现贴纸效果
2015/01/28 Javascript
jQuery里filter()函数与find()函数用法分析
2015/06/24 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
2017/02/21 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
浅谈Angular 中何时取消订阅
2017/11/22 Javascript
理解 JavaScript EventEmitter
2018/03/29 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
Vuex新手的理解与使用详解
2019/05/31 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
如何配置vue.config.js 处理static文件夹下的静态文件
2020/06/19 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
vue 表单输入框不支持focus及blur事件的解决方案
2020/11/17 Vue.js
Python2实现的LED大数字显示效果示例
2017/09/04 Python
Python实现购物系统(示例讲解)
2017/09/13 Python
Python用户推荐系统曼哈顿算法实现完整代码
2017/12/01 Python
selenium+python设置爬虫代理IP的方法
2018/11/29 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
2019/04/29 Python
Tensorflow实现部分参数梯度更新操作
2020/01/23 Python
Python实现手势识别
2020/10/21 Python
英国领先的男士美容护发用品公司:Mankind
2016/08/31 全球购物
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
中科前程Java笔试题
2016/11/20 面试题
学习经验演讲稿
2014/05/10 职场文书
机械系毕业生求职信
2014/05/28 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
2014年图书室工作总结
2014/12/09 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
2019年大学生暑期社会实践调查报告模板
2019/11/07 职场文书