分页: 1 / 1

下百度mp3 python版

发表于 : 2008-05-26 17:31
baic
发现总是有解码出错的不得不a=a.decode(wc,'ignore')
呵,真是BUG多多

代码: 全选

#!/usr/bin/env python
#coding:utf-8
import sys
import os
import re
wc='gbk'
lc=sys.getfilesystemencoding()
downdir='~/Music/'
if len(sys.argv)==1:print '必须输入音乐名称';sys.exit()
m=sys.argv[1].split(".")
e='-1'
if len(m)==1:pass
elif m[1]=='mp3':
    e='0'
elif m[1]=='rm':
    e='1'
elif m[1]=='wma':
    e='2'
import urllib2
url="http://mp3.baidu.com/m?f=ms&tn=baidump3&ct=134217728&lf=&rn=&word=%s&lm=%s"%(urllib2.quote(m[0].decode(lc).encode(wc)),e)
f=urllib2.urlopen(url)
a=f.readline()
aaa=[]
url=[]
while a:
    if a.find('<td class=d><a href=')!=-1:
        aa=[]
        for i in range(8):
            a=a.decode(wc,'ignore')
            if i==0:
                tmp=re.findall('<td class=d><a href="(.*)" title.*target="_blank">(.*)</a>.*',a)
                url=url+[tmp[0][0]]
                a=tmp[0][1]
                a=re.sub(r'<[^<>]*>','',a)
                a=re.sub(r' ','',a)
            else:
                a=re.sub(r'(<[^<>]*>)','',a)
                a=re.sub(r'[\r\n]+','',a)
                a=re.sub(r' ','',a)
                a=a.replace('&nbsp;','')
            aa=aa+[a]
            a=f.readline()
            while a=="":a=f.readline()
        aaa=aaa+[aa]
    else:a=f.readline()
f.close()
print '序号\t格式\t大小\t歌手名\t歌曲名\t专辑名'
i=0
for ii in aaa[:20]:
    i=i+1
    print i,'\t',
    print '%s\t%s\t%s\t%s\t%s'%(ii[-1],ii[-2],ii[1],ii[0],ii[2])
try:c=input('输入下载序号')
except:print '';sys.exit()
print "选择下载",c
file=aaa[c-1][1].encode(lc)+'-'+aaa[c-1][0].encode(lc)
def getu(url,chartset='gbk'):
    aa=re.findall(u'[\u4e00-\u9fa5 ]+',url)
    for k in aa:
        url=url.replace(k,urllib2.quote(k.encode(chartset)))
    return url
u=getu(url[c-1])
f=urllib2.urlopen(u)
a=f.read()
f.close()
a=re.findall(r'<li.*\n.*<a href="(.*)" target.*',a)
musicurl=getu(a[0].decode(wc)).encode(lc)
if os.path.exists('/usr/bin/axel'):
    cmd='axel -a "'+musicurl+'" -o '+downdir+file+"."+musicurl.split('.')[-1]
else:
    cmd='wget "'+musicurl+'" -O '+downdir+file+"."+musicurl.split('.')[-1]
os.system(cmd) 

发表于 : 2008-05-26 17:34
xiooli
恩。。。。。这个也太多了啊,lz给个龟壳吧 :D

发表于 : 2008-05-26 17:35
baic
xiooli 写了:恩。。。。。这个也太多了啊,lz给个龟壳吧 :D
什么龟壳

发表于 : 2008-05-26 17:38
xiooli
GUI啦 :D
另:给个附件吧,这个复制粘贴以后好多缩进就乱了,这对python来说简直令人抓狂

发表于 : 2008-05-26 17:42
baic
改正了显示正常现在

发表于 : 2008-05-26 17:55
baic
GUI不会

发表于 : 2008-05-26 21:43
round08
请教,运行以后提示这个是咋回事呢?
Traceback (most recent call last):
File "mp3.py", line 37, in <module>
a=a.decode(c)
UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 82-83: illegal multibyte sequence

发表于 : 2008-05-26 22:37
baic
请教,运行以后提示这个是咋回事呢?
Traceback (most recent call last):
File "mp3.py", line 37, in <module>
a=a.decode(c)
UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 82-83: illegal multibyte sequence
解码出错,改成gbk就成,1楼已经修改,也许其它的也需要改,感谢试用

发表于 : 2008-05-27 0:06
yangyuruc
谢谢楼主,,,,,
可以学习学习了

发表于 : 2008-05-28 19:39
fengjie
又一个下载MP3,呵呵 学习了