爬网易云热歌榜

直接看效果:

背景:

        为了从网易云音乐的榜单中下载指定数量的歌曲。网易云音乐提供了多种音乐榜单,如飙升榜、新歌榜、原创榜和热歌榜,每个榜单都有一个唯一的ID。用户可以通过输入榜单ID和希望下载的歌曲数量,程序将自动从相应的榜单中提取歌曲信息并下载这些歌曲。

        代码首先定义了一个字典,将榜单ID与对应的榜单名称关联起来。接着,程序会提示用户输入想要下载的榜单ID和歌曲数量。然后,程序会创建一个文件夹来存储下载的歌曲,文件夹的名称基于所选榜单的名称。

        接下来,程序会构建请求URL并发送请求,以获取榜单页面的HTML内容。使用正则表达式,程序从HTML中提取出歌曲的ID和标题。对于每首歌曲,程序会构建音乐的播放地址,并请求该地址以下载音乐文件。下载完成后,程序会将音乐文件保存到之前创建的文件夹中,并确保文件名不包含任何特殊字符,以避免文件保存时出现错误。

        这种自动化下载的方式大大简化了用户手动下载歌曲的过程,使得用户能够快速获取自己喜欢的音乐。

直接上代码:

import requests
import re
import os

# 榜单ID对应的字典
bangdan_dict = {
    '19723756': '飙升榜',
    '3779629': '新歌榜',
    '2884035': '原创榜',
    '3778678': '热歌榜'
}

print("榜单对应的ID如下:", bangdan_dict)

# 输入榜单ID
bangdan_id = input('请输入你想下载的榜单ID:')

# 输入要下载的歌曲数量
num_songs = int(input('请输入要下载的歌曲数量:'))

# 创建文件夹路径
filename = 'D:/网易云热歌榜/' + bangdan_dict[bangdan_id] + "\\"
if not os.path.exists(filename):
    os.makedirs(filename)

# 请求榜单页面
url = f"https://music.163.com/discover/toplist?id={bangdan_id}"
headers = {
    "User-Agent" : "你自己的"
}
response = requests.get(url=url, headers=headers)

# 使用正则表达式提取歌曲信息
html_data = re.findall(r'<li><a href="/song\?id=(\d+)">(.*?)</a>', response.text)[:num_songs]
for song_id, title in html_data:
    # 构建音乐播放地址
    music_url = f"http://music.163.com/song/media/outer/url?id={song_id}.mp3"
    # 请求音乐播放地址并下载音乐
    music_content = requests.get(url=music_url, headers=headers).content
    # 清理文件名中的特殊字符
    cleaned_title = re.sub(r'[\\/*?:"<>|]', '', title)
    with open(os.path.join(filename, f"{cleaned_title}.mp3"), 'wb') as file:
        file.write(music_content)
    print(f"{bangdan_dict[bangdan_id]}中的{cleaned_title}.mp3下载成功")

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LucianaiB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值