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入门篇之数字
Oct 20 Python
利用Python开发实现简单的记事本
Nov 15 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
python3实现zabbix告警推送钉钉的示例
Feb 20 Python
python实现矩阵打印
Mar 02 Python
Python分布式进程中你会遇到的问题解析
May 28 Python
PyQt QListWidget修改列表项item的行高方法
Jun 20 Python
Python 自动登录淘宝并保存登录信息的方法
Sep 04 Python
Python时间差中seconds和total_seconds的区别详解
Dec 26 Python
python输出pdf文档的实例
Feb 13 Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 Python
python 如何使用find和find_all爬虫、找文本的实现
Oct 16 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+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
javascript删除option选项的多种方法总结
2013/11/22 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
jQuery中Find选择器用法示例
2016/09/21 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
vue组件初学_弹射小球(实例讲解)
2017/09/06 Javascript
详解使用Typescript开发node.js项目(简单的环境配置)
2017/10/09 Javascript
从零开始搭建一个react项目开发
2018/02/09 Javascript
react redux入门示例
2018/04/19 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
JS判断数组四种实现方法详解
2020/06/29 Javascript
[59:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第二局
2016/03/04 DOTA
python Django模板的使用方法
2016/01/14 Python
Python使用smtplib模块发送电子邮件的流程详解
2016/06/27 Python
从DataFrame中提取出Series或DataFrame对象的方法
2018/11/10 Python
python实现扫描ip地址的小程序
2019/04/16 Python
python版百度语音识别功能
2019/07/09 Python
对python中的装包与解包实例详解
2019/08/24 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
Python如何实现动态数组
2019/11/02 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
2020/02/27 Python
python能开发游戏吗
2020/06/11 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
Swisse官方海外旗舰店:澳大利亚销量领先,自然健康品牌
2017/12/15 全球购物
关于Java String的一道面试题
2013/09/29 面试题
军训心得体会
2013/12/31 职场文书
新闻学专业大学生职业生涯规划范文
2014/03/02 职场文书
教育基金募捐倡议书
2014/05/14 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
超市采购员岗位职责
2015/04/07 职场文书
超市食品安全承诺书
2015/04/29 职场文书
Python中json.load()和json.loads()有哪些区别
2021/06/07 Python