一个利用python从中科大音乐网站下载mp3的程序
来源:互联网 发布:美国劳工统计局数据 编辑:程序博客网 时间:2024/05/21 07:49
(说明: 这是我2007年写在cublog(China Unix)上的博客,现在把它转到这里来.)
一直很喜欢到中科大音乐网站听音乐,在教育网进入中科大的音乐网站速度超级快,另外这上面的音乐很全,质量特别好,所以推荐教育网内用户到music.ustc.edu.cn上面听音乐哦。
好是好,有时候很想把这些mp3下载下来,又一次看到一位仁兄写了一个用shell脚本下载的程序,我就仿照它用python写了一个。
首先,用firefox一类浏览器登陆music.ustc.edu.cn,找到你想要的专辑,点击[播放]。此时1个*.m3
u的文件.比如我下载了周华健的"让我喜欢让我忧"专辑的M3U文件,就保存为 "周华健-让我欢喜让我忧.m3u"
这个文件的格式为:
#EXTM3U 你现在还好吗http://music2.ustc.edu.cn:8088/fe3e11885f53947efb6418fcc0540c5c%2F80%2Fde447c53c5adedbf28542f42cc8a8687.mp3#EXTM3U 让我欢喜让我忧http://music2.ustc.edu.cn:8088/27c85fd4fcd4cae342a9c1df6dc95793%2F81%2F8d8eeef5821e50b7e6696555cf789663.mp3
其实,我们要做的工作很简单,就是下载http后面那个mp3文件,然后命名为#EXTM3U 后面的那个文件名就可以了.
由于python的强大文件处理,我决定让他下载当前目录下的全部m3u文件.也就是说,你可以下载多个类似于"周华健-让我欢喜让我忧.m3u"的文件放在当前目录下,这个程序将会一个一个地,给每一张专辑建一个以专辑名为名的文件夹,然后把专辑里面的歌曲下载到对应的文件夹里面.
好了,开始吧.关键的一点,一定要对下载下来的文件进行解码处理,由于不知道它的文字编码方式,我使用了一个chardet库,专门用于检测字符的编码.由于整个程序很简单,我就直接贴在下面了:
#!c:\python25\python.exe# coding utf-8 #import os,sysimport urllib,re,httplibimport globimport chardet,string,redecode = ''logo = """***************************************************************************** Mp3 Downloader v1.0 * * download music form music.ustc.edu.cn * * 用法: 登陆http://music.ustc.edu.cn,找到想听的歌[专辑],点击“播放”,下载名**为'music@ustc.m3u'的文件,建议使用firefox *浏览网页,否则IE会自动调用媒体播**放器播放,无法下载m3u文件。把下载的m3u文件命名为"专辑名.m3u"的形式[专辑名 **不要有空格!]. 本程序会自动把这些歌曲下载到当前目录下的以专辑名的文件夹名 **字的文件夹下。可以有多个m3u共存,本程序会逐个下载,直到全部完成 ** Thank You for using! and Enjoy! ** By Yuanshl [yuanshl02_@_gmail.com] ** Form CSLab of Lanzhou University 2007/10/26 *"""print logodef tripstring(s): x = string.split(s) out = '' first = 1 for i in x: out += i #out = re.sub("'",'',out) return outfor filex in glob.glob("*.m3u"): dirName = filex[:-4] f = open(filex,"r") lines = f.readlines() lineCount = len(lines) os.system("mkdir %s"%dirName) print "Downloading %s,Total %d songs"%(dirName,lineCount/2) for line in range(lineCount/2): decode = chardet.detect(lines[line*2])["encoding"] if decode != None: muName =lines[line*2][8:].decode(decode) else: muName =lines[line*2][8:].decode("gb2312") #muName=tripstring(muName) print muName muUrl = lines[line*2 + 1] muUrl = re.sub("\n",'',muUrl) muPath = re.sub(r"http://music2.ustc.edu.cn:8088/",'',muUrl)[:-5] print "Downloading Name = %s.mp3....." % muName[:-1] urlopen = urllib.URLopener() musicfile=urlopen.open("http://music2.ustc.edu.cn:8088" + "/" + muUrl) data = musicfile.read() musicfile.close() filename=muName[:-1] #decode = chardet.detect(filename)["encoding"] #print decode try: #filename = unicode(filename, 'cp936') musicfile=open("./%s/%s.mp3"%(dirName,filename.encode("gb2312")),'wb+') except: musicfile=open("./%s/%s.mp3"%(dirName,filename.encode("utf-8")),'wb+') musicfile.write(data) musicfile.close() print "Downloaded Ok!" musicfile.close() f.close() print "%d songs from %s downloaded Ok!"%(lineCount/2,dirName) print "All done! Enjoy!"程序的运行结果如下:
1,登陆中科大网站
2,运行程序:
前面说到字符的编码,这是最重要的,因为我这个程序在80%的情况下工作没有问题,但是也有少数情况下导致解码失败的情况.一直搞不懂什么原因.
最后不管你是否是一个程序员,如果你热爱音乐,喜欢到中科大听音乐又想下载的话,请给我邮件,我会在第一时间内把编译成exe的程序发给你,谢谢你的支持!
- 一个利用python从中科大音乐网站下载mp3的程序
- Python爬虫下载QQ音乐网站歌曲
- 利用python修改mp3的标签
- 各大音乐网站接口
- 各大音乐网站接口
- 各大音乐网站接口
- 在《大耳朵英语》的播客上,批量下载MP3
- #一个无聊的程序#用python调用lame把一个目录下的wav全部转成高音质mp3
- #python爬取音乐网站
- python--利用有道网址编写一个翻译句子的程序
- MP3在线搜索下载程序
- 阶段性总结报名:爬音乐网站mp3时遇见的问题以及解决方案
- 今天发现一个更新较快的音乐网站
- 一个P2P+搜索音乐网站的策划书 (转载)
- 做一个MP3小偷程序
- 发一个python写的简单的mp3播放器
- 用python写的一个mp3的tag解析
- python 写作简单的mp3程序 - linux系统
- pl/sql 不能对存储过程进行单步调试的问题解决方法
- 第2章---C++概述
- Android 4种存储方式详解(一)
- 第3章---类和对象
- 十分钟保你熟悉C++ STL
- 一个利用python从中科大音乐网站下载mp3的程序
- Java条件编译
- CPSR
- 第4章---派生类与继承
- 黑马程序员-java-交通灯系统
- 判断左右触摸滑动
- 读书笔记_栈
- adb devices no permission
- Windows phone 7 高级编程——使用visual stdio 、silverlight与XNA进行应用和游戏开发