Python爬虫 - 网易云音乐下载

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

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

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

具体过程:

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

python 复制代码
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

python 复制代码
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.并分别对歌单创建单独的文件夹,进行歌曲存放

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

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

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

python 复制代码
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.下载歌曲

python 复制代码
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.对于排行榜部分,和歌单逻辑基本相同

python 复制代码
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)

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

结果:

完整代码

联系邮箱:mango_1698@163.com

相关推荐
上班日常摸鱼30 分钟前
Shell脚本基础教程:变量、条件判断、循环、函数实战(附案例)
python
无心水1 小时前
【Python实战进阶】5、Python字符串终极指南:从基础到高性能处理的完整秘籍
开发语言·网络·python·字符串·unicode·python实战进阶·python工业化实战进阶
2301_807583231 小时前
了解python,并编写第一个程序,常见的bug
linux·python
小白学大数据1 小时前
构建混合爬虫:何时使用Requests,何时切换至Selenium处理请求头?
爬虫·python·selenium·测试工具
2401_827560201 小时前
【Python脚本系列】PyAudio+librosa+dtw库录制、识别音频并实现点击(四)
python·语音识别
BBB努力学习程序设计1 小时前
Python自动化脚本:告别重复劳动
python·pycharm
BBB努力学习程序设计1 小时前
Python函数式编程:优雅的代码艺术
python·pycharm
2501_940943912 小时前
体系课\ Python Web全栈工程师
开发语言·前端·python
田姐姐tmner2 小时前
Python切片
开发语言·python
4***72132 小时前
网络爬虫学习:借助DeepSeek完善爬虫软件,实现模拟鼠标右键点击,将链接另存为本地文件
爬虫·学习·计算机外设