下百度mp3 python版

sh/bash/dash/ksh/zsh等Shell脚本
回复
baic
帖子: 166
注册时间: 2006-08-22 23:10

下百度mp3 python版

#1

帖子 baic » 2008-05-26 17:31

发现总是有解码出错的不得不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) 
上次由 baic 在 2008-05-29 16:36,总共编辑 6 次。
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

#2

帖子 xiooli » 2008-05-26 17:34

恩。。。。。这个也太多了啊,lz给个龟壳吧 :D
baic
帖子: 166
注册时间: 2006-08-22 23:10

#3

帖子 baic » 2008-05-26 17:35

xiooli 写了:恩。。。。。这个也太多了啊,lz给个龟壳吧 :D
什么龟壳
头像
xiooli
帖子: 6956
注册时间: 2007-11-19 21:51
来自: 成都
联系:

#4

帖子 xiooli » 2008-05-26 17:38

GUI啦 :D
另:给个附件吧,这个复制粘贴以后好多缩进就乱了,这对python来说简直令人抓狂
baic
帖子: 166
注册时间: 2006-08-22 23:10

#5

帖子 baic » 2008-05-26 17:42

改正了显示正常现在
baic
帖子: 166
注册时间: 2006-08-22 23:10

#6

帖子 baic » 2008-05-26 17:55

GUI不会
round08
帖子: 5
注册时间: 2008-05-22 10:14
系统: 12.04

#7

帖子 round08 » 2008-05-26 21:43

请教,运行以后提示这个是咋回事呢?
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
baic
帖子: 166
注册时间: 2006-08-22 23:10

#8

帖子 baic » 2008-05-26 22:37

请教,运行以后提示这个是咋回事呢?
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楼已经修改,也许其它的也需要改,感谢试用
头像
yangyuruc
帖子: 385
注册时间: 2007-09-26 17:23
来自: 云南-香格里拉

#9

帖子 yangyuruc » 2008-05-27 0:06

谢谢楼主,,,,,
可以学习学习了
自打用上ubuntu,我决定做一个不盗版的好公民
头像
fengjie
帖子: 130
注册时间: 2008-03-19 14:20

#10

帖子 fengjie » 2008-05-28 19:39

又一个下载MP3,呵呵 学习了
主板:ASUS P8Z77-V
CPU:Intel 酷睿i3 3200
内存:ADTA DDRⅢ 1600 8G
显卡:Intel® HD Graphic
声卡:Realtek ALC 892
有线网卡:Intel® 82579V
无线网卡:Qualcomm Atheros AR9485
硬盘:WDC WD6401AALS
电源:长城ATX-350SD静音大师
显示器:Samsung S24A350H
回复