由于做语音识别需要在使用voxforge的语音文件,但是voxforge文件太多,手工下载肯定不行,可以使用批量下载软件进行下载。而出于好奇,我打算用python自己写一个批量下载脚本,最后虽然能用,但速度不行,而且是单线程的,只能一个文件一个文件的下,就当当作练练手,过一阵再研究多线程的下载。步骤如下:
voxforge的English speech files连接为:
http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Audio/Main/16kHz_16bit/
在火狐浏览器中查看源代码,以及通过浏览器下载时的连接我们可以看到每个文件的连接都是上面的主连接加上文件名即可,如下:
下载连接为:
http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Audio/Main/16kHz_16bit/1snoke-20120412-hge.tgz
网页源代码为:
<a href="1snoke-20120412-hge.tgz">1snoke-20120412-hge.tgz</a>
因此,只需要把整个源代码中包含href=”********.tgz”的部分提取出来,然后去掉“href=”””,然后在前面加上上面的主连接就是每个文件的完整连接。
部分连接如下:
http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Audio/Main/16kHz_16bit/zid-20100821-kto.tgz
http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Audio/Main/16kHz_16bit/zlp-20100110-gyn.tgz
http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Audio/Main/16kHz_16bit/zlp-20100110-hpf.tgz
http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Audio/Main/16kHz_16bit/zlp-20100110-jmb.tgz
http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Audio/Main/16kHz_16bit/zlp-20100110-jwa.tgz
http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Audio/Main/16kHz_16bit/zlp-20100110-kgx.tgz
http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Audio/Main/16kHz_16bit/zlp-20100110-lbe.tgz
http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Audio/Main/16kHz_16bit/zlp-20100110-ujo.tgz
http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Audio/Main/16kHz_16bit/zlp-20100110-vuh.tgz
http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Audio/Main/16kHz_16bit/zlp-20100110-wwn.tgz
有了连接就好办了,直接使用python的urllib2.Request 和urllib2.urlopen函数就可以开始下载了。
好,不多说了,源码如下,写得很不规范,将就看吧。
import urllib
import urllib2
import os
import re
os.chdir('D:\\voxforge speech files\\')#改变当前路径
#refiles=open('speech_files_path.txt','w+')#存储所有下载连接
mainpath='http://www.repository.voxforge1.org/downloads/SpeechCorpus/Trunk/Audio/Main/16kHz_16bit/'
def gettgz(url):
page=urllib.urlopen(url)
html=page.read()
reg=r'href=".*\.tgz"'
tgzre=re.compile(reg)
tgzlist=re.findall(tgzre,html) #找到所有.tgz文件
for i in tgzlist:
filename=i.replace('href="','')
filename=filename.replace('"','')
print '正在下载:'+filename #提示正在下载的文件
downfile=i.replace('href="',mainpath)
downfile=downfile.replace('"','') #得到每个文件的完整连接
req = urllib2.Request(downfile) #下载文件
ur = urllib2.urlopen(req).read()
open(filename,'wb').write(ur) #把下载的文件以tgz格式存储在D盘
# refiles.write(downfile+'\n')
html=gettgz(mainpath)
#refiles.close()
运行效果如下: