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多进程编程技术实例分析
Sep 16 Python
Python中使用装饰器时需要注意的一些问题
May 11 Python
Python中for循环和while循环的基本使用方法
Aug 21 Python
Python实现字符串匹配算法代码示例
Dec 05 Python
python利用sklearn包编写决策树源代码
Dec 21 Python
python排序函数sort()与sorted()的区别
Sep 18 Python
python发送多人邮件没有展示收件人问题的解决方法
Jun 21 Python
django-crontab 定时执行任务方法的实现
Sep 06 Python
python 求定积分和不定积分示例
Nov 20 Python
Python安装whl文件过程图解
Feb 18 Python
python3 简单实现组合设计模式
Jul 02 Python
基于PyInstaller各参数的含义说明
Mar 04 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实现文件下载(支持中文文名)
2013/12/04 PHP
PHP独立Session数据库存储操作类分享
2014/06/11 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
浅谈Javascript鼠标和滚轮事件
2012/06/27 Javascript
javascript对中文按照拼音排序代码
2014/08/20 Javascript
jquery带翻页动画的电子杂志代码分享
2015/08/21 Javascript
JavaScript位移运算符(无符号) &gt;&gt;&gt; 三个大于号 的使用方法详解
2016/03/31 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
Vue 中使用vue2-highcharts实现曲线数据展示的方法
2018/03/05 Javascript
vue中使用echarts制作圆环图的实例代码
2018/07/27 Javascript
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
Python程序设计入门(1)基本语法简介
2014/06/13 Python
在Python中使用Neo4j数据库的教程
2015/04/16 Python
python基于multiprocessing的多进程创建方法
2015/06/04 Python
关于Django显示时间你应该知道的一些问题
2017/12/25 Python
批量将ppt转换为pdf的Python代码 只要27行!
2018/02/26 Python
python2.7安装图文教程
2018/03/13 Python
对python中使用requests模块参数编码的不同处理方法
2018/05/18 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
Python3 串口接收与发送16进制数据包的实例
2019/06/12 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
关于python字符串方法分类详解
2019/08/20 Python
Numpy的简单用法小结
2019/08/28 Python
python使用配置文件过程详解
2019/12/28 Python
Python tkinter界面实现历史天气查询的示例代码
2020/08/23 Python
李维斯牛仔裤荷兰官方网站:Levi’s NL
2020/08/23 全球购物
中秋节礼品促销方案
2014/02/02 职场文书
先进工作者获奖感言
2014/02/08 职场文书
财政专业大学生职业生涯规划书
2014/09/17 职场文书
村党支部书记个人对照材料汇报
2014/10/26 职场文书
2014个人年终工作总结范文
2014/12/15 职场文书
预备党员个人总结
2015/02/14 职场文书
MySQL如何解决幻读问题
2021/08/07 MySQL
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript