Python爬虫 - 网易云音乐下载

Python爬虫 - 网易云音乐下载

爬取网易云音乐实战,仅供学习,不可商用,出现问题,概不负责!

分为爬取网易云歌单和排行榜单两部分。

因为网页中,只能显示出歌单的前20首歌曲,所以仅支持下载前20首歌曲(非VIP音乐)

image-20240129104641545

具体过程:

1.通过抓包,获取到请求头

image-20240118212144164

headers = {
    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
    "Cookie": "替换为自己的Cookie",
    "Sec-Ch-Ua-Platform": "macOS",
    "Sec-Fetch-Dest": "iframe",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "same-origin",
    "Upgrade-Insecure-Requests": "1"
}

2.发送请求,获取到网页源代码,通过Xpath进行解析,获取到歌曲名称,歌手名字,以及歌曲id

url = input("请输入要抓取的歌单链接:")
url = url.replace("/#", "")
res = requests.get(url, headers=headers)
res.encoding = 'utf-8'
res = res.text
html = etree.HTML(res)
title = html.xpath('//h2[@class="f-ff2 f-brk"]/text()')
songs = html.xpath('//ul[@class="f-hide"]/li/a/@href')
names = html.xpath('//ul[@class="f-hide"]/li/a/text()')

3.并分别对歌单创建单独的文件夹,进行歌曲存放

if len(title)!=0:
    path = './网易云歌单/' + title[0] + "/"
else:
    path = "./网易云歌单/未知歌单/"

if not os.path.exists(path):
    os.makedirs(path)

4.判断是否为VIP歌曲,将VIP歌曲排除

for i in range(len(music_urls)):
    try:
        res = requests.get(music_urls[i], headers=headers).content.decode('utf-8')
        if res.find('很抱歉,你要查找的网页找不到') != -1:
            print(names[i] + ',VIP专属歌曲,无法下载')
            remove_url.append(music_urls[i])
            remove_name.append(names[i])
            continue
    except:
        pass
for item in remove_name:
    names.remove(item)
for url in remove_url:
    music_urls.remove(url)

5.下载歌曲

for i in range(len(music_urls)):
    try:
        print('正在下载..', names[i])
        res = requests.get(music_urls[i], headers=headers)
        with open(path + names[i] + ".mp3", "wb") as f:
            f.write(res.content)
        print('下载成功..', names[i])
    except Exception as e:
        if os.path.exists(path + names[i] + ".mp3"):
            os.remove(path + names[i] + ".mp3")
        print('下载失败,请联系管理员')

6.对于排行榜部分,和歌单逻辑基本相同

url = input("请输入榜单链接:")
url = url.replace("/#", "")
res = requests.get(url, headers=headers)
res.encoding = 'utf-8'
res = res.text
html = etree.HTML(res)
title = html.xpath('//h2[@class="f-ff2"]/text()')
songs = html.xpath('//ul[@class="f-hide"]/li/a/@href')
names = html.xpath('//ul[@class="f-hide"]/li/a/text()')
if len(title)!=0:
    path = './网易云歌单/' + title[0] + "/"
else:
    path = "./网易云歌单/未知歌单/"

if not os.path.exists(path):
    os.makedirs(path)

for item in songs:
    temp = str(item).replace("/song?id=", "")
    ids.append(temp)

music_urls = []
for id in ids:
    music_urls.append(baseUrl + id + '.mp3')
downLoad(music_urls, names, path)

下载部分与下载歌单歌曲相同。

结果:

完整代码

import os
import requests
from lxml import etree

ids = []

def getMy():
    headers = {
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
        "Cookie": "NTES_P_UTID=oZtbQWE9QovUD1BWXspVGJFYc1n68Z3d|1685104051; P_INFO=mango_1698@163.com|1685104051|0|mail163|00&99|shd&1685093566&caldav#shd&370800#10#0#0|&0|mailmaster_win&mailmaster_mac&mbmail_android|mango_1698@163.com; nts_mail_user=mango_1698@163.com:-1:1; _iuqxldmzr_=32; _ntes_nnid=beb7159865c873461e5e25db7cb5c603,1685104056861; _ntes_nuid=beb7159865c873461e5e25db7cb5c603; WEVNSM=1.0.0; WNMCID=kiirek.1685104057692.01.0; WM_TID=4bkIGNiAj1dBAEBBUAeQlXaAVX4n70dh; ntes_utid=tid._.C%252BqQr5OZN8xAQlBBFEaUxDLFQT94VPsD._.0; sDeviceId=YD-tBV0FdoTLCRBVwRARFPBfEHLsYnHy+On; NMTID=00OKiza-FPBFxcRxkbyoNXefGYXsHQAAAGIWAdhJw; __bid_n=188803d7dfc33f512e4207; FPTOKEN=bLl/EONizXgZYCiYTmBPGFtT5gjsMVStk5w//MR6+3kBtza/7Lruu2N60ZiycdClAktAFazCTT9kdi/mRSPliU9lnNkyh5WBTKsrxuyx3FId1WTrrKCOV5pfC2RnxoFr5DM48u/HvEeyOudUBQ3utkex5bWyAMWHttnp+p/I9ZlrpRL2U6m2n4rxd01mWHjBdexJMqRbISlax52PKBHjAenPv7NapfZYSVspNM0RdiLJVMIInGJgVksxOBFVXaptzIBqqQGa3S62mRUCrIenPmYg2N7V6pr8pH08chXgKRclcoPwyj4gNEyp9ZnOnavtrnPRS+xktFl3gkTfcePEdwfms8bYobh2U7ZI6J7PEIjzBOUMP+WfOIUNNRMAgm4yaNxT5cILKa/HVGydBezZww==|TnoLZ+wpVWoo0f3DzxoyoVDJoRKT5NXAVpvZMi1Ylmg=|10|00b8da4170a2ed70c830bc69086669a3; JSESSIONID-WYYY=t%5Cp%2BZcM3cYSy9GhWJwMqBTvtN6UvaDPECMDrMEal%5CfCfHHV4oQ5ypHH953ZeEtcn8vCxdIz37XO%5CivHVw067aBP8JBScsupIZgwGlUI71Dl1f5i44K%5Cyip2DW%2B2xGOw47uezo4G%2FfNdj5%5CeqQx%2Bt%5CSE2f5q73B3jGjBYGa0CkWdyol8%2B%3A1686312668805; WM_NI=3JJWSazZW%2FVnslu%2BARKUPX1%2FvuOzHdCI5Bzsrpg9DGejlZrGpfTCtQNRC701deOsbaAcIQzbqqfXGWq61yxWO0Ce%2FeC6eJooJMNyqaCqCkqIblxNDtyNBG1GbMUaLla5djY%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6ee8aef5b94b48eaec23aa3a88fa7d85b838b9aadc1648a95ba92f96fbaa9b790f12af0fea7c3b92af19686b8d26bba8699d0d566b1b4bbccc45a898ba0b9b425b6ab819bcb708197fba3f979b2b0a9dac74da7b6a4bbf14db4ba9ca4f75b8e8e8dd8b33ba8bb8194e16b83bd87b2f96ab3afaab9c65db3eaff9afb5d8df08d86ae6f81eaababee658a93829af46b81af8d8cf443a2b4b8afc780bb928ea8b44da2939b82cf68a3ebac8bdc37e2a3; __snaker__id=gnFrczq64Xk00ykb; gdxidpyhxdE=QdLumCONk7TIEb9MtMzZBMrxPfETjSZKx3DLjAJorGaYtJtm4b%5C2tpACpcBBUueRgAkA%2B50kJc%5CqyE7P6qS8RcNywZGiUamq8ShM%2Bqr9Bju5O6a30Zhzb0Ws9%5Chf6cIDlpKRj%5C%2FjhqPWQKKnQf41Z6VezE5GX5YXeuRlP3RZy5n%2FWNet%3A1686311771907; YD00000558929251%3AWM_NI=%2B%2FWbDyPUMFI0VAQlh0guERQ8sZPRdixkHZ0W9UJCpEQEX%2FEK00O5zuhGqqJ%2FeUczYKeUPX7bIw70yhoF6OClzy2509Ns5ovWCyJEBWUnzWjp%2Ffh08sayoopH8l7ChBtNTFM%3D; YD00000558929251%3AWM_NIKE=9ca17ae2e6ffcda170e2e6eeb0fc3eb6b3aedac652a3eb8ea7d45a828e8eadc87d9abebb92e941fb9dfc9ad02af0fea7c3b92ae9f19983c773948b83a7cc3c969f9f8deb3ca5ab8bb3d434b186a0b3e763bcb588bbb35dfb8b86a4f34f939b98d0c841f4f081d6f97fac99bf92c925a78bad9bdc41a78ba0b9b66a8ba9f9d1fc64ad9afab0c268baa7fed6b3338eadfb90f55d81a786a6c15d97b2b6b8e97cedbaa8d1bb79a3a7a190f344fcb4f9a4eb4ab8929ca7d037e2a3; YD00000558929251%3AWM_TID=rMBmDrTw94lAFEVBEEOAwZK6v2bpHoyZ; __csrf=9b53a42c5e02a3eb496d9acf0ffb0d9c; MUSIC_U=00B0CAED00AD4C54FC50C3D6CA1E6B59390522490045FA77A4761D5D873F5A133EF8B85DD9852D2494C0EB7DFEA528B594AE55D284759BA87A4D83BBE108EDBEC9C4960A0B4481964115A6F6263009FAB4970C86F9EDD68F3ACDAB74EA4F4EFB9A590F65571502289F1E3E5B8DAD7F7E37877D6C77555E18E0CDAC83EEA7EDFE481A531BC8116AC5C254E630129A2A1F2ACEB8A4F04268A438C300F6316E64A81132D1BDC5CA612CF58EBD51974458F2B1D7159FA32769F4A22CFB898B58AD5BD82BE619AF9FE000C0916E817E1206C4D0FE8F0EAFDA80666C07D0E3FDB52B3678E7B3E857CA6287679E989EA151C58309E3EFEFCFDA252B2C9EC44F221F16A2F346261344255B1A52D0A70054834889173B2E630CC47B198340B67EE2EC4661677DD72767E9B60B270240C082F1FE6A6989E1D944D61DDBA3EDE894B49B07BB8B55D088A7184B6F1F61090B27FF76467F80CCC19AAC36B436BEA40DD7E9F599DA; ntes_kaola_ad=1",
        "Sec-Ch-Ua-Platform": "macOS",
        "Sec-Fetch-Dest": "iframe",
        "Sec-Fetch-Mode": "navigate",
        "Sec-Fetch-Site": "same-origin",
        "Upgrade-Insecure-Requests": "1"
    }
    url = input("请输入要抓取的歌单链接:")
    url = url.replace("/#", "")
    res = requests.get(url, headers=headers)
    res.encoding = 'utf-8'
    res = res.text
    html = etree.HTML(res)
    title = html.xpath('//h2[@class="f-ff2 f-brk"]/text()')
    songs = html.xpath('//ul[@class="f-hide"]/li/a/@href')
    names = html.xpath('//ul[@class="f-hide"]/li/a/text()')

    if len(title)!=0:
        path = './网易云歌单/' + title[0] + "/"
    else:
        path = "./网易云歌单/未知歌单/"

    if not os.path.exists(path):
        os.makedirs(path)

    for item in songs:
        temp = str(item).replace("/song?id=", "")
        ids.append(temp)

    music_urls = []
    for id in ids:
        music_url = "https://music.163.com/song/media/outer/url?id=" + id + '.mp3'
        music_urls.append(music_url)
    downLoad(music_urls,names,path)

def getHot():
    headers = {
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
        "Cookie": "NTES_P_UTID=oZtbQWE9QovUD1BWXspVGJFYc1n68Z3d|1685104051; P_INFO=mango_1698@163.com|1685104051|0|mail163|00&99|shd&1685093566&caldav#shd&370800#10#0#0|&0|mailmaster_win&mailmaster_mac&mbmail_android|mango_1698@163.com; nts_mail_user=mango_1698@163.com:-1:1; _iuqxldmzr_=32; _ntes_nnid=beb7159865c873461e5e25db7cb5c603,1685104056861; _ntes_nuid=beb7159865c873461e5e25db7cb5c603; WEVNSM=1.0.0; WNMCID=kiirek.1685104057692.01.0; WM_TID=4bkIGNiAj1dBAEBBUAeQlXaAVX4n70dh; ntes_utid=tid._.C%252BqQr5OZN8xAQlBBFEaUxDLFQT94VPsD._.0; sDeviceId=YD-tBV0FdoTLCRBVwRARFPBfEHLsYnHy+On; NMTID=00OKiza-FPBFxcRxkbyoNXefGYXsHQAAAGIWAdhJw; __bid_n=188803d7dfc33f512e4207; FPTOKEN=bLl/EONizXgZYCiYTmBPGFtT5gjsMVStk5w//MR6+3kBtza/7Lruu2N60ZiycdClAktAFazCTT9kdi/mRSPliU9lnNkyh5WBTKsrxuyx3FId1WTrrKCOV5pfC2RnxoFr5DM48u/HvEeyOudUBQ3utkex5bWyAMWHttnp+p/I9ZlrpRL2U6m2n4rxd01mWHjBdexJMqRbISlax52PKBHjAenPv7NapfZYSVspNM0RdiLJVMIInGJgVksxOBFVXaptzIBqqQGa3S62mRUCrIenPmYg2N7V6pr8pH08chXgKRclcoPwyj4gNEyp9ZnOnavtrnPRS+xktFl3gkTfcePEdwfms8bYobh2U7ZI6J7PEIjzBOUMP+WfOIUNNRMAgm4yaNxT5cILKa/HVGydBezZww==|TnoLZ+wpVWoo0f3DzxoyoVDJoRKT5NXAVpvZMi1Ylmg=|10|00b8da4170a2ed70c830bc69086669a3; WM_NI=3JJWSazZW%2FVnslu%2BARKUPX1%2FvuOzHdCI5Bzsrpg9DGejlZrGpfTCtQNRC701deOsbaAcIQzbqqfXGWq61yxWO0Ce%2FeC6eJooJMNyqaCqCkqIblxNDtyNBG1GbMUaLla5djY%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6ee8aef5b94b48eaec23aa3a88fa7d85b838b9aadc1648a95ba92f96fbaa9b790f12af0fea7c3b92af19686b8d26bba8699d0d566b1b4bbccc45a898ba0b9b425b6ab819bcb708197fba3f979b2b0a9dac74da7b6a4bbf14db4ba9ca4f75b8e8e8dd8b33ba8bb8194e16b83bd87b2f96ab3afaab9c65db3eaff9afb5d8df08d86ae6f81eaababee658a93829af46b81af8d8cf443a2b4b8afc780bb928ea8b44da2939b82cf68a3ebac8bdc37e2a3; __snaker__id=gnFrczq64Xk00ykb; gdxidpyhxdE=QdLumCONk7TIEb9MtMzZBMrxPfETjSZKx3DLjAJorGaYtJtm4b%5C2tpACpcBBUueRgAkA%2B50kJc%5CqyE7P6qS8RcNywZGiUamq8ShM%2Bqr9Bju5O6a30Zhzb0Ws9%5Chf6cIDlpKRj%5C%2FjhqPWQKKnQf41Z6VezE5GX5YXeuRlP3RZy5n%2FWNet%3A1686311771907; YD00000558929251%3AWM_NI=%2B%2FWbDyPUMFI0VAQlh0guERQ8sZPRdixkHZ0W9UJCpEQEX%2FEK00O5zuhGqqJ%2FeUczYKeUPX7bIw70yhoF6OClzy2509Ns5ovWCyJEBWUnzWjp%2Ffh08sayoopH8l7ChBtNTFM%3D; YD00000558929251%3AWM_NIKE=9ca17ae2e6ffcda170e2e6eeb0fc3eb6b3aedac652a3eb8ea7d45a828e8eadc87d9abebb92e941fb9dfc9ad02af0fea7c3b92ae9f19983c773948b83a7cc3c969f9f8deb3ca5ab8bb3d434b186a0b3e763bcb588bbb35dfb8b86a4f34f939b98d0c841f4f081d6f97fac99bf92c925a78bad9bdc41a78ba0b9b66a8ba9f9d1fc64ad9afab0c268baa7fed6b3338eadfb90f55d81a786a6c15d97b2b6b8e97cedbaa8d1bb79a3a7a190f344fcb4f9a4eb4ab8929ca7d037e2a3; YD00000558929251%3AWM_TID=rMBmDrTw94lAFEVBEEOAwZK6v2bpHoyZ; __csrf=9b53a42c5e02a3eb496d9acf0ffb0d9c; MUSIC_U=00B0CAED00AD4C54FC50C3D6CA1E6B59390522490045FA77A4761D5D873F5A133EF8B85DD9852D2494C0EB7DFEA528B594AE55D284759BA87A4D83BBE108EDBEC9C4960A0B4481964115A6F6263009FAB4970C86F9EDD68F3ACDAB74EA4F4EFB9A590F65571502289F1E3E5B8DAD7F7E37877D6C77555E18E0CDAC83EEA7EDFE481A531BC8116AC5C254E630129A2A1F2ACEB8A4F04268A438C300F6316E64A81132D1BDC5CA612CF58EBD51974458F2B1D7159FA32769F4A22CFB898B58AD5BD82BE619AF9FE000C0916E817E1206C4D0FE8F0EAFDA80666C07D0E3FDB52B3678E7B3E857CA6287679E989EA151C58309E3EFEFCFDA252B2C9EC44F221F16A2F346261344255B1A52D0A70054834889173B2E630CC47B198340B67EE2EC4661677DD72767E9B60B270240C082F1FE6A6989E1D944D61DDBA3EDE894B49B07BB8B55D088A7184B6F1F61090B27FF76467F80CCC19AAC36B436BEA40DD7E9F599DA; ntes_kaola_ad=1; JSESSIONID-WYYY=ANDv%2FOyQXRX6FCv%2BX8ZZOm9RVpiKV40mKrbZITB%5Cjuhr7ux%2BDIhoSrUKA443FdIYXuNUv%2F2Qerso2%2Bixoz8cesoqTwbatzeOf4XlOXiFH1dWnDH54WfjNa7mNAijzmzyUOaEQXglPa8Xzn1UYTuHQrznHWjGyF5ausG%2BreC5CrVUvHqr%3A1686362789318",
        "Sec-Ch-Ua-Platform": "macOS",
        "Sec-Fetch-Dest": "iframe",
        "Sec-Fetch-Mode": "navigate",
        "Sec-Fetch-Site": "same-origin",
        "Upgrade-Insecure-Requests": "1"
    }
    url = input("请输入榜单链接:")
    url = url.replace("/#", "")
    res = requests.get(url, headers=headers)
    res.encoding = 'utf-8'
    res = res.text
    html = etree.HTML(res)
    title = html.xpath('//h2[@class="f-ff2"]/text()')
    songs = html.xpath('//ul[@class="f-hide"]/li/a/@href')
    names = html.xpath('//ul[@class="f-hide"]/li/a/text()')
    if len(title)!=0:
        path = './网易云歌单/' + title[0] + "/"
    else:
        path = "./网易云歌单/未知歌单/"

    if not os.path.exists(path):
        os.makedirs(path)

    for item in songs:
        temp = str(item).replace("/song?id=", "")
        ids.append(temp)

    music_urls = []
    for id in ids:
        music_url = "https://music.163.com/song/media/outer/url?id=" + id + '.mp3'
        music_urls.append(music_url)
    downLoad(music_urls, names, path)

def downLoad(music_urls,names,path):
    headers = {
        "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36",
        "Cookie": "NTES_P_UTID=oZtbQWE9QovUD1BWXspVGJFYc1n68Z3d|1685104051; P_INFO=mango_1698@163.com|1685104051|0|mail163|00&99|shd&1685093566&caldav#shd&370800#10#0#0|&0|mailmaster_win&mailmaster_mac&mbmail_android|mango_1698@163.com; nts_mail_user=mango_1698@163.com:-1:1; _iuqxldmzr_=32; _ntes_nnid=beb7159865c873461e5e25db7cb5c603,1685104056861; _ntes_nuid=beb7159865c873461e5e25db7cb5c603; WEVNSM=1.0.0; WNMCID=kiirek.1685104057692.01.0; WM_TID=4bkIGNiAj1dBAEBBUAeQlXaAVX4n70dh; ntes_utid=tid._.C%252BqQr5OZN8xAQlBBFEaUxDLFQT94VPsD._.0; sDeviceId=YD-tBV0FdoTLCRBVwRARFPBfEHLsYnHy+On; NMTID=00OKiza-FPBFxcRxkbyoNXefGYXsHQAAAGIWAdhJw; __bid_n=188803d7dfc33f512e4207; FPTOKEN=bLl/EONizXgZYCiYTmBPGFtT5gjsMVStk5w//MR6+3kBtza/7Lruu2N60ZiycdClAktAFazCTT9kdi/mRSPliU9lnNkyh5WBTKsrxuyx3FId1WTrrKCOV5pfC2RnxoFr5DM48u/HvEeyOudUBQ3utkex5bWyAMWHttnp+p/I9ZlrpRL2U6m2n4rxd01mWHjBdexJMqRbISlax52PKBHjAenPv7NapfZYSVspNM0RdiLJVMIInGJgVksxOBFVXaptzIBqqQGa3S62mRUCrIenPmYg2N7V6pr8pH08chXgKRclcoPwyj4gNEyp9ZnOnavtrnPRS+xktFl3gkTfcePEdwfms8bYobh2U7ZI6J7PEIjzBOUMP+WfOIUNNRMAgm4yaNxT5cILKa/HVGydBezZww==|TnoLZ+wpVWoo0f3DzxoyoVDJoRKT5NXAVpvZMi1Ylmg=|10|00b8da4170a2ed70c830bc69086669a3; JSESSIONID-WYYY=t%5Cp%2BZcM3cYSy9GhWJwMqBTvtN6UvaDPECMDrMEal%5CfCfHHV4oQ5ypHH953ZeEtcn8vCxdIz37XO%5CivHVw067aBP8JBScsupIZgwGlUI71Dl1f5i44K%5Cyip2DW%2B2xGOw47uezo4G%2FfNdj5%5CeqQx%2Bt%5CSE2f5q73B3jGjBYGa0CkWdyol8%2B%3A1686312668805; WM_NI=3JJWSazZW%2FVnslu%2BARKUPX1%2FvuOzHdCI5Bzsrpg9DGejlZrGpfTCtQNRC701deOsbaAcIQzbqqfXGWq61yxWO0Ce%2FeC6eJooJMNyqaCqCkqIblxNDtyNBG1GbMUaLla5djY%3D; WM_NIKE=9ca17ae2e6ffcda170e2e6ee8aef5b94b48eaec23aa3a88fa7d85b838b9aadc1648a95ba92f96fbaa9b790f12af0fea7c3b92af19686b8d26bba8699d0d566b1b4bbccc45a898ba0b9b425b6ab819bcb708197fba3f979b2b0a9dac74da7b6a4bbf14db4ba9ca4f75b8e8e8dd8b33ba8bb8194e16b83bd87b2f96ab3afaab9c65db3eaff9afb5d8df08d86ae6f81eaababee658a93829af46b81af8d8cf443a2b4b8afc780bb928ea8b44da2939b82cf68a3ebac8bdc37e2a3; __snaker__id=gnFrczq64Xk00ykb; gdxidpyhxdE=QdLumCONk7TIEb9MtMzZBMrxPfETjSZKx3DLjAJorGaYtJtm4b%5C2tpACpcBBUueRgAkA%2B50kJc%5CqyE7P6qS8RcNywZGiUamq8ShM%2Bqr9Bju5O6a30Zhzb0Ws9%5Chf6cIDlpKRj%5C%2FjhqPWQKKnQf41Z6VezE5GX5YXeuRlP3RZy5n%2FWNet%3A1686311771907; YD00000558929251%3AWM_NI=%2B%2FWbDyPUMFI0VAQlh0guERQ8sZPRdixkHZ0W9UJCpEQEX%2FEK00O5zuhGqqJ%2FeUczYKeUPX7bIw70yhoF6OClzy2509Ns5ovWCyJEBWUnzWjp%2Ffh08sayoopH8l7ChBtNTFM%3D; YD00000558929251%3AWM_NIKE=9ca17ae2e6ffcda170e2e6eeb0fc3eb6b3aedac652a3eb8ea7d45a828e8eadc87d9abebb92e941fb9dfc9ad02af0fea7c3b92ae9f19983c773948b83a7cc3c969f9f8deb3ca5ab8bb3d434b186a0b3e763bcb588bbb35dfb8b86a4f34f939b98d0c841f4f081d6f97fac99bf92c925a78bad9bdc41a78ba0b9b66a8ba9f9d1fc64ad9afab0c268baa7fed6b3338eadfb90f55d81a786a6c15d97b2b6b8e97cedbaa8d1bb79a3a7a190f344fcb4f9a4eb4ab8929ca7d037e2a3; YD00000558929251%3AWM_TID=rMBmDrTw94lAFEVBEEOAwZK6v2bpHoyZ; __csrf=9b53a42c5e02a3eb496d9acf0ffb0d9c; MUSIC_U=00B0CAED00AD4C54FC50C3D6CA1E6B59390522490045FA77A4761D5D873F5A133EF8B85DD9852D2494C0EB7DFEA528B594AE55D284759BA87A4D83BBE108EDBEC9C4960A0B4481964115A6F6263009FAB4970C86F9EDD68F3ACDAB74EA4F4EFB9A590F65571502289F1E3E5B8DAD7F7E37877D6C77555E18E0CDAC83EEA7EDFE481A531BC8116AC5C254E630129A2A1F2ACEB8A4F04268A438C300F6316E64A81132D1BDC5CA612CF58EBD51974458F2B1D7159FA32769F4A22CFB898B58AD5BD82BE619AF9FE000C0916E817E1206C4D0FE8F0EAFDA80666C07D0E3FDB52B3678E7B3E857CA6287679E989EA151C58309E3EFEFCFDA252B2C9EC44F221F16A2F346261344255B1A52D0A70054834889173B2E630CC47B198340B67EE2EC4661677DD72767E9B60B270240C082F1FE6A6989E1D944D61DDBA3EDE894B49B07BB8B55D088A7184B6F1F61090B27FF76467F80CCC19AAC36B436BEA40DD7E9F599DA; ntes_kaola_ad=1",
        "Sec-Ch-Ua-Platform": "macOS",
        "Sec-Fetch-Dest": "iframe",
        "Sec-Fetch-Mode": "navigate",
        "Sec-Fetch-Site": "same-origin",
        "Upgrade-Insecure-Requests": "1"
    }
    remove_url = []
    remove_name = []
    for i in range(len(music_urls)):
        try:
            res = requests.get(music_urls[i], headers=headers).content.decode('utf-8')
            if res.find('很抱歉,你要查找的网页找不到') != -1:
                print(names[i] + ',VIP专属歌曲,无法下载')
                remove_url.append(music_urls[i])
                remove_name.append(names[i])
                continue
        except:
            pass
    for item in remove_name:
        names.remove(item)
    for url in remove_url:
        music_urls.remove(url)

    for i in range(len(music_urls)):
        try:
            print('正在下载..', names[i])
            res = requests.get(music_urls[i], headers=headers)
            with open(path + names[i] + ".mp3", "wb") as f:
                f.write(res.content)
            print('下载成功..', names[i])
        except Exception as e:
            if os.path.exists(path + names[i] + ".mp3"):
                os.remove(path + names[i] + ".mp3")
            print('下载失败,请联系管理员QQ:634498594')

if __name__ == '__main__':
    while True:
        print("-----------------------------")
        print("|      1.歌单下载             |")
        print("|      2.榜单下载             |")
        print("|      0.退出系统             |")
        print("-----------------------------")
        option = input("请输入选项:")
        if option=="1":
            getMy()
        elif option=="2":
            getHot()
        elif option=="0":
            break
        else:
            print("您输入的选项有误!")
posted @ 2025-03-27 20:53  mango0219  阅读(462)  评论(0)    收藏  举报