python爬取网易云音乐,并下载,拿来可以直接用

更新了一版代码

自己搞了一个,也不是很好,新学的

编写一个爬取网易云音乐的程序涉及多个步骤,包括网络请求、HTML解析、文件下载等。以下是一个基本的Python脚本示例,它使用requestsBeautifulSoup库来爬取网易云音乐的歌曲,并使用os库来管理下载的文件。

请注意,网易云音乐的网站结构和服务条款可能会随时更改,因此这个脚本可能需要根据实际情况进行调整。在使用爬虫时,务必遵守网站的robots.txt文件和相关服务条款。

首先,确保安装了必要的库:

pip install requests beautifulsoup4

爬虫下载音乐的好处有以下几点:

  1. 方便快捷:使用爬虫下载音乐可以快速获取想要的音乐文件,无需通过其他渠道或购买,节省了时间和金钱。

  2. 大量资源:互联网上存在大量的音乐资源,通过爬虫可以一次性获取大量的音乐文件,满足用户的需求。

  3. 自由选择:通过爬虫下载音乐可以自由选择想要的歌曲、专辑或艺术家,无需受限于特定平台或服务的限制。

  4. 离线收听:将音乐文件下载到本地后,可以在没有网络连接的情况下随时随地收听,提供了离线收听的方便性。

  5. 高质量音乐:通过爬虫可以获取到高质量的音乐文件,无需担心音质问题。

然而,需要注意的是,爬虫下载音乐也存在一些问题,比如版权侵权、法律风险等,因此在使用爬虫下载音乐时需要尊重版权和法律规定。

要获取网易云音乐中歌手的ID,可以按照以下步骤操作:

  1. 打开网易云音乐的官网(https://music.163.com/)并登录账号。
  2. 在搜索栏中搜索目标歌手的名称,并选择相应的搜索结果。
  3. 进入歌手的个人页,可以在浏览器的地址栏中找到歌手的ID。通常,ID是以 /artist?id= 开头,后面跟着一串数字。例如:/artist?id=6452
  4. 将获取到的ID保存下来,以便后续使用。

另外,你也可以尝试使用网易云音乐的开放API来获取歌手的ID。具体的API文档和接口使用方法可以参考网易云音乐开放平台的官方文档。

废话不多说,直接上代码,复制直接可以用,希望拿了可以点个赞i👍

# - coding: utf-8 -*-
import requests
import json
import os

# 设置请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}

# 获取指定歌手的歌曲信息
def get_artist_songs(artist_id):
    """
    发送请求获取指定歌手的歌曲信息

    参数:
    artist_id (str): 歌手的 ID

    返回:
    list or None: 成功则返回歌曲列表,否则返回 None
    """
    url = 'https://music.163.com/api/v1/artist/songs'  # 歌手歌曲信息 API 的 URL
    params = {
        'id': artist_id,  # 歌手 ID
        'offset': 0,  # 偏移量
        'total': True,  # 是否获取全部歌曲信息
        'limit': 1000  # 获取歌曲数量
    }
    try:
        response = requests.get(url, headers=headers, params=params)  # 发送 GET 请求
        response.raise_for_status()  # 如果响应状态码不是 200,抛出异常
        result = json.loads(response.text)  # 将响应的文本内容转为 JSON 格式
        songs = result['songs']  # 获取歌曲列表
        return songs
    except requests.exceptions.RequestException as e:
        print('请求出错:', e)  # 打印请求错误信息
        return None

# 下载歌曲
def download_song(song_name, song_url, save_dir):
    """
    下载指定歌曲并保存到指定目录

    参数:
    song_name (str): 歌曲名称
    song_url (str): 歌曲的下载 URL
    save_dir (str): 保存歌曲的目录
    """
    if not os.path.exists(save_dir):  # 如果保存目录不存在,则创建目录
        os.makedirs(save_dir)
    save_path = os.path.join(save_dir, '{}.mp3'.format(song_name))  # 拼接保存路径和文件名
    if os.path.exists(save_path):  # 如果文件已存在,则跳过下载
        print('{} 已存在,跳过下载!'.format(song_name))
        return
    try:
        response = requests.get(song_url, headers=headers)  # 发送 GET 请求
        response.raise_for_status()  # 如果响应状态码不是 200,抛出异常
        with open(save_path, 'wb') as f:  # 以二进制写入模式打开文件
            f.write(response.content)
        print('{} 下载完成!'.format(song_name))  # 打印下载完成信息
    except requests.exceptions.RequestException as e:
        print('{} 下载失败!'.format(song_name))  # 打印下载失败信息

# 获取歌曲名称和播放链接
def get_song_info(song):
    """
    从歌曲数据中提取歌曲名称和播放链接

    参数:
    song (dict): 包含歌曲信息的字典

    返回:
    tuple: 歌曲名称和播放链接的元组
    """
    song_name = song['name']  # 歌曲名称
    song_id = song['id']  # 歌曲 ID
    url = 'https://music.163.com/song/media/outer/url?id={}.mp3'.format(song_id)  # 歌曲播放链接
    return song_name, url

# 主函数
if __name__ == '__main__':
    artist_id = '2116'  # 歌手 ID,这里以陈奕迅为例,歌手 ID 可以在网易云音乐上搜索歌手,进入歌手的主页,查看 URL 中的 ID 参数即为该歌手的 ID
    num_songs = 10  # 下载歌曲数量
    songs = get_artist_songs(artist_id)  # 获取歌手的歌曲信息
    if songs:
        save_dir = '陈奕迅歌曲'  # 保存目录
        for i, song in enumerate(songs):
            if i >= num_songs:
                break
            song_name, song_url = get_song_info(song)  # 获取歌曲名称和播放链接
            download_song(song_name, song_url, save_dir)  # 下载歌曲
    else:
        print('获取歌曲信息失败!')  # 如果获取歌曲信息失败

最后结果

基于Node.js,提供网易云所有API接口数据,包括:登录,获取用户信息 , 歌单,收藏,mv, dj 数量 获取用户歌单 获取用户电台 获取用户关注列表 获取用户粉丝列表 获取用户动态 获取用户播放记录 获取精品歌单 获取歌单详情 搜索 搜索建议 获取歌词 歌曲评论 收藏单曲到歌单 专辑评论 歌单评论 mv 评论 电台节目评论 banner 获取歌曲详情 获取专辑内容 获取歌手单曲 获取歌手 mv 获取歌手专辑 获取歌手描述 获取相似歌手 获取相似歌单 相似 mv 获取相似音乐 获取最近 5 个听了这首歌的用户 获取每日推荐歌单 获取每日推荐歌曲 私人 FM 签到 喜欢音乐 垃圾桶 歌单 ( 网友精选碟 ) 新碟上架 热门歌手 最新 mv 推荐 mv 推荐歌单 推荐新音乐 推荐电台 推荐节目 独家放送 mv 排行 获取 mv 数据 播放 mv/视频 排行榜 歌手榜 云盘 电台 - 推荐 电台 - 分类 电台 - 分类推荐 电台 - 订阅 电台 - 详情 电台 - 节目 给评论点赞 获取动态 热搜列表(简略) 发送私信 发送私信歌单 新建歌单 收藏/取消收藏歌单 歌单分类 收藏的歌手列表 订阅的电台列表 相关歌单推荐 付费精选接口 音乐是否可用检查接口 登录状态 获取视频播放地址 发送/删除评论 热门评论 视频评论 退出登录 所有榜单 所有榜单内容摘要 收藏视频 收藏 MV 视频详情 相关视频 关注用户 新歌速递 喜欢音乐列表(无序) 收藏的 MV 列表 获取最新专辑 听歌打卡 获取视频标签下的视频 已收藏专辑列表 获取动态评论 歌单收藏者列表 云盘歌曲删除 热门话题 电台 - 推荐类型 电台 - 非热门类型 电台 - 今日优选 心动模式/智能播放 转发动态 删除动态 分享歌曲、歌单、mv、电台、电台节目到动态 通知-私信 通知-评论 通知-@我 通知-通知 设置 云盘数据详情 私信内容 我的数字专辑 batch批量请求接口 获取视频标签列表 全部mv 网易出品mv 收藏/取消收藏专辑 专辑动态信息 热搜列表(详细) 更换绑定手机 检测手机号码是否已注册 初始化昵称 更新歌单描述 更新歌单名 更新歌单标签 默认搜索关键词 删除歌单 电台banner 用户电台 热门电台 电台 - 节目详情 电台 - 节目榜 电台 - 新晋电台榜/热门电台榜 类别热门电台 云村热评 电台24小时节目榜 电台24小时主播榜 电台最热主播榜 电台主播新人榜 电台付费精品榜 歌手热门50首歌曲
评论 36
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值