import urllib.request |
import sys |
import re |
import os |
w = 0 |
wt = 0 |
class Dowsong(): # 下载歌曲 |
def __init__( self , songid): |
self .songid = songid |
"""获取歌名""" |
name = urllib.request.urlopen( 'https://music.163.com/song?id=' + self .songid).read().decode() # 获取源码 |
name = re. compile ( '"title": "' + "(. * ?) " + '" ,', re.S).findall(name) # 获取歌名 |
print ( '正在下载' + name[ 0 ]) |
if os.path.exists(f + '/' + name[ 0 ] + '.mp3' ) = = True : # 判断该文件是否存在,如果存在就删除 |
os.remove(f + '/' + name[ 0 ] + '.mp3' ) |
dow = 'http://music.163.com/song/media/outer/url?id=' + self .songid + '.mp3' # 下载api |
urllib.request.urlretrieve(dow, f + '/' + name[ 0 ] + '.mp3' ) # 下载 |
kb = ((os.path.getsize(f + '/' + name[ 0 ] + '.mp3' )) / 1000 ) # 计算大小 |
if (kb) < 100 : # 判断是否下载成功 |
print (name[ 0 ] + '下载失败' ) |
os.remove(f + '/' + name[ 0 ] + '.mp3' ) |
w = + 1 |
else : |
print (name[ 0 ] + '下载成功' + '文件大小为' + str (kb) + 'kb' ) |
wt = + 1 |
i = input ( '请输入歌曲连接或歌单连接' ) |
# 类型判断 |
t = '' |
d = '' |
try : # 判断是否包含song |
a = re.search( 'song' , i).span() |
except : |
t = '0' |
else : |
d = 'song' |
print ( '你输入的可能为歌曲' ) |
if t = = '0' : |
try : |
a = re.search( 'playlist' , i).span() # 判断是否包含playlist |
except : |
print ( '你输入的可能不是歌曲或者歌单的连接' ) |
sys.exit() |
else : |
d = 'playlist' |
print ( '你输入的可能是歌单' ) |
i = i.split( 'id=' ) # 截取id |
i = i[ 1 ] |
i = i.replace( '&user' , '', ) |
f = input ( '请输入要保存到的文件目录:' ) |
try : |
os.makedirs(f) # 如果目录不存在那就创建个 |
except : |
pass |
print (i) |
# 处理歌曲 |
if d = = 'song' : |
Dowsong(i) |
# 处理歌单、 |
if d = = 'playlist' : |
url = 'https://music.163.com/playlist?id=' + i |
url = urllib.request.urlopen(url).read().decode() # 获取歌单源码 |
names = re. compile ( '"title": "' + "(. * ?) " + '" ,', re.S).findall(url) # 取歌单名 |
print ( '当前歌单名:' + names[ 0 ]) |
url = re. compile ( |
'<span class="f-ff2">歌曲列表</span>' + "(.*?)" + '<textarea id="song-list-pre-data" style="display:none;">' , |
re.S).findall(url) # 截取中间信息 |
url = url[ 0 ] |
url = re. compile ( '<li><a href="/song' + "(. * ?) " + '" >', re.S).findall(url) # 获取歌曲id |
print ( '获取到' + str ( len (url)) + '个音乐id信息' ) |
f = f + '/' + names[ 0 ] # 以歌单名,创建文件目录 |
try : |
os.makedirs(f) |
except : |
pass |
for urls in url: |
urls = urls.replace( '?id=' , '', ) |
Dowsong(urls) |
print ( '下载成功' + str (wt) + '个' + '\n' + '下载失败' + str (w)) |
中级程序员
by: 中原 发表于:2020-10-25 11:32:11 顶(15) | 踩(0) 回复
怎么全部下载失败
回复评论