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抽象基类用法实例分析
Jun 04 Python
利用matplotlib+numpy绘制多种绘图的方法实例
May 03 Python
Python连接phoenix的方法示例
Sep 29 Python
python实现员工管理系统
Jan 11 Python
python实现用户答题功能
Jan 17 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
Jan 27 Python
Python中的取模运算方法
Nov 10 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
Oct 11 Python
Python列表操作方法详解
Feb 09 Python
TensorBoard 计算图的可视化实现
Feb 15 Python
Python文件操作基础流程解析
Mar 19 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
Apr 03 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使用cookie实现记住登录状态
2015/04/27 PHP
通过Email发送PHP错误的方法
2015/07/20 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
2010/01/15 Javascript
js 模拟实现类似c#下的hashtable的简单功能代码
2010/01/24 Javascript
js计算两个时间之间天数差的实例代码
2013/11/19 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
详解Wondows下Node.js使用MongoDB的环境配置
2016/03/01 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
jQuery实现元素的插入
2017/02/27 Javascript
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
Js和VUE实现跑马灯效果
2020/05/25 Javascript
Python的一些用法分享
2012/10/07 Python
python实现的阳历转阴历(农历)算法
2014/04/25 Python
python网络编程学习笔记(六):Web客户端访问
2014/06/09 Python
提升Python程序运行效率的6个方法
2015/03/31 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
Python爬虫辅助利器PyQuery模块的安装使用攻略
2016/04/24 Python
python中使用正则表达式的连接符示例代码
2017/10/10 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
南非领先的在线旅行社:Travelstart南非
2016/09/04 全球购物
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
建筑工程专业毕业生自荐信
2013/10/19 职场文书
入团者的自我评价分享
2013/12/02 职场文书
公司企业表扬信
2014/01/11 职场文书
上班迟到检讨书
2014/09/15 职场文书
神农溪导游词
2015/02/11 职场文书
大学生自荐信范文
2015/03/05 职场文书
小平小道观后感
2015/06/09 职场文书
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL
详解Go语言中Get/Post请求测试
2022/06/01 Golang
一文教你快速生成MySQL数据库关系图
2022/06/28 Redis