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批量导出导入MySQL用户的方法
Nov 15 Python
python 解析XML python模块xml.dom解析xml实例代码
Feb 07 Python
python字符串连接方式汇总
Aug 21 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
May 06 Python
python+ffmpeg视频并发直播压力测试
Mar 06 Python
Python生成rsa密钥对操作示例
Apr 26 Python
python爬虫刷访问量 2019 7月
Aug 01 Python
Python解析json代码实例解析
Nov 25 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 Python
tensorflow与numpy的版本兼容性问题的解决
Jan 08 Python
聊聊pytorch测试的时候为何要加上model.eval()
May 23 Python
 分享一个Python 遇到数据库超好用的模块
Apr 06 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
用header 发送cookie的php代码
2007/03/16 PHP
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
php设计模式 State (状态模式)
2011/06/26 PHP
PHP常用特殊运算符号和函数总结(php新手入门必看)
2013/02/02 PHP
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
PHP使用PDO操作sqlite数据库应用案例
2019/03/07 PHP
php源码的安装方法和实例
2019/09/26 PHP
laravel 使用auth编写登录的方法
2019/09/30 PHP
JavaScript获取GridView中用户点击控件的行号,列号
2009/04/14 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
Google 地图获取API Key详细教程
2016/08/06 Javascript
动态加载css方法实现和深入解析
2017/01/18 Javascript
BootStrap 图片样式、辅助类样式和CSS组件的实例详解
2017/01/20 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
Node.js成为Web应用开发最佳选择的原因
2018/02/05 Javascript
angular 组件通信的几种实现方式
2018/07/13 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
详解如何用VUE写一个多用模态框组件模版
2018/09/27 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
使用Angular9和TypeScript开发RPG游戏的方法
2020/03/25 Javascript
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
Python 备份程序代码实现
2017/03/06 Python
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
浅谈python装饰器探究与参数的领取
2017/12/01 Python
python列表生成式与列表生成器的使用
2018/02/23 Python
pyqt5实现登录界面的模板
2020/05/30 Python
Python3运算符常见用法分析
2020/02/14 Python
Python可以用来做什么
2020/11/23 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
保险内勤岗位职责
2014/04/05 职场文书
办公室岗位职责范本
2015/04/11 职场文书
销售开票员岗位职责
2015/04/15 职场文书