虾米音乐歌曲下载

import requests,re,os
from lxml import etree
header={
'referer': 'https://www.xiami.com/',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
}
def xia():
while 1:
name=input('请输入查找的歌手或歌名(1:退出查找):')
if name=='1':
break
else:
a=requests.get('https://www.xiami.com/search?key='+name+'&pos=1',headers=header).text
b=etree.HTML(a).xpath('//*[@class="song_name"]/a/text()')
bb=etree.HTML(a).xpath('//*[@class="song_artist"]/a//text()')
zhi=etree.HTML(a).xpath('//*[@class="chkbox"]/input/@value')
print(len(zhi),zhi)
c=''
for i in bb:
c+=i
print(len(b),b)
cc=c.split('\n\t\t\t\t\t\t\t\t\t\t\t\t')[1:]
dictt={}
for ii in range(len(b)):
print(ii+1,b[ii]+'——'+cc[ii])
dictt[ii+1]={b[ii]+'——'+cc[ii]:zhi[ii]}
print(len(b)+1,'退出选歌!')
while 1:
ru=int(input('请输入要下载的歌序号:'))
if ru == len(b)+1:
break
else:
for x,y in dictt[ru].items():
url=requests.get('http://www.xiami.com/widget/xml-single/uid/0/sid/'+y,headers=header).text
# print(url)
location=re.compile('CDATA\[(.*?)\]',re.S)
location1=location.findall(url)
a=location1[4]
# a='9hFx%1795p_3%5a511t%i216753k15Edd7t2aF7376%e5E-c7cpFm145%93y3-257f%mi7%%58F%7%8b4f31.422E_a325%7e2A2n%FF5luD%E537b%8e223_.t15-E1f32.tF921mh5E%c9bd'
strs=a.find('h')
hang=a[:strs]
yin=a[strs:]
shu=len(yin)//int(hang)+1
# print(shu)
# print(shu*int(hang))
# print(len(yin))
aa=shu*int(hang)-len(yin)
# print(aa)
if aa!=0:
a = yin[-(shu - 1):] + '*'
aa1=yin[:-(shu - 1):]+a
if shu*int(hang)-len(aa1)!=0:
c=[]
for ii in range(2,aa+1):
cc=yin[-(shu - 1)*ii:-(shu - 1)*(ii-1)]+'*'
c.insert(0,cc)
aa2=''
for iii in c:
aa2+=iii
aa1 = yin[:-(shu - 1) * aa] + aa2+a
nn=''
for i in range(shu):
nn+=aa1[i::shu]
dd=requests.utils.unquote(nn).replace('^', '0')
ge=dd.replace('*','')
ge1=requests.get(ge,headers=header).content
if os.path.isfile('F:\\项目\\6yue\\pachong\\7.6\\歌曲\\'+x+'.mp3'):
print(x+'已存在!')
else:
print('开始下载《'+x+'》')
with open('F:\\项目\\6yue\\pachong\\7.6\\歌曲\\'+x+'.mp3','wb') as f:
f.write(ge1)
print('《'+x+'》下载完成!')
try:
xia()
except:
print('歌曲出错!请重新选!')
xia()

猜你喜欢

转载自www.cnblogs.com/ygjn/p/9283952.html