首页 > 其他分享 >爬取网易云音乐热歌榜:从入门到实战

爬取网易云音乐热歌榜:从入门到实战

时间:2024-11-20 20:15:09浏览次数:3  
标签:bangdan 榜单 入门 url 热歌 音乐 ID 爬取 id

请添加图片描述
爬取网易云音乐热歌榜:从入门到实战

前提声明

  • 爬虫应遵守目标网站的robots.txt协议,尊重版权和用户隐私。
  • 本代码仅供学习和研究使用,不得用于商业用途。
  • 请确保在合法合规的前提下使用本代码。
  • 本代码所爬音乐为公开可选择的音乐

目录

  1. 引言
  2. 环境准备
  3. 代码结果
  4. 代码解析
  5. 结语
  6. 全部代码

引言

在数字化时代,音乐已成为我们日常生活中不可或缺的一部分。网易云音乐以其丰富的音乐资源和个性化推荐系统,赢得了广大用户的喜爱。然而,你是否想过,如何将这些音乐资源爬取下来,以便在没有网络的情况下也能随时欣赏呢?本文将带你走进爬虫的世界,手把手教你如何爬取网易云音乐热歌榜。

环境准备

在开始之前,确保你的开发环境中安装了以下Python库:

  • requests:用于发起网络请求。
  • re:用于正则表达式匹配。
  • os:用于操作系统功能,如文件路径管理。

如果尚未安装,可以通过以下命令进行安装:

pip install requests

代码解析

1. 榜单ID与名称映射

首先,我们定义了一个榜单ID与名称的映射字典bangdan_dict,方便后续代码中使用。

bangdan_dict = {
    '19723756': '飙升榜',
    '3779629': '新歌榜',
    '2884035': '原创榜',
    '3778678': '热歌榜'
}

2. 用户输入

接着,程序会提示用户输入想要下载的榜单ID和歌曲数量。

bangdan_id = input('请输入你想下载的榜单ID:')
num_songs = int(input('请输入要下载的歌曲数量:'))

3. 文件夹创建

根据用户输入的榜单名称,创建一个文件夹以存储下载的歌曲。

filename = 'D:/网易云热歌榜/' + bangdan_dict[bangdan_id] + "\\"
if not os.path.exists(filename):
    os.makedirs(filename)

4. 发起网络请求

使用requests库发起对网易云音乐榜单页面的请求,并设置合适的User-Agent以模拟浏览器访问。

url = f"https://music.163.com/discover/toplist?id={bangdan_id}" 
headers = {
    "User-Agent": "Mozilla/5.0 ..."
}
response = requests.get(url=url, headers=headers)

5. 正则表达式提取

使用正则表达式从响应内容中提取歌曲ID和标题。

html_data = re.findall(r'<li><a href="/song\?id=(\d+)">(.*?)</a>', response.text)[:num_songs]

6. 音乐下载

对于每首歌曲,构建音乐播放地址,发起请求并下载音乐文件。

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

7. 文件保存

将下载的音乐保存到之前创建的文件夹中,并清理文件名中的特殊字符。

cleaned_title = re.sub(r'[\\/*?:"<>|]', '', title)
with open(os.path.join(filename, f"{cleaned_title}.mp3"), 'wb') as file:
    file.write(music_content)

结语

通过本文,你已经学会了如何使用Python爬取网易云音乐热歌榜。这不仅是一次编程实践,更是对网络请求、正则表达式和文件操作的深入理解。希望你能将所学应用到更多有趣和有益的项目中去。

效果展示
在这里插入图片描述
在这里插入图片描述


总结
在数字化时代,音乐已经成为我们生活中不可或缺的一部分。网易云音乐以其丰富的音乐资源和个性化推荐系统,赢得了广大用户的喜爱。本文旨在通过Python编程,手把手教读者如何爬取网易云音乐热歌榜,以便在没有网络的情况下也能随时欣赏音乐。

首先,我们介绍了爬虫的前提声明,强调了遵守目标网站的robots.txt协议,尊重版权和用户隐私的重要性。接着,我们进行了环境准备,确保开发环境中安装了必要的Python库,如requests、re和os。

在代码解析部分,我们详细讲解了如何通过榜单ID与名称映射、用户输入、文件夹创建、发起网络请求、正则表达式提取、音乐下载和文件保存等步骤来实现爬取网易云音乐热歌榜的功能。我们定义了一个榜单ID与名称的映射字典bangdan_dict,方便后续代码中使用。然后,程序会提示用户输入想要下载的榜单ID和歌曲数量,并根据用户输入的榜单名称创建一个文件夹以存储下载的歌曲。

使用requests库发起对网易云音乐榜单页面的请求,并设置合适的User-Agent以模拟浏览器访问。通过正则表达式从响应内容中提取歌曲ID和标题,然后构建音乐播放地址,发起请求并下载音乐文件。最后,将下载的音乐保存到之前创建的文件夹中,并清理文件名中的特殊字符。

通过本文,读者已经学会了如何使用Python爬取网易云音乐热歌榜。这不仅是一次编程实践,更是对网络请求、正则表达式和文件操作的深入理解。希望读者能将所学应用到更多有趣和有益的项目中去。如果有任何问题或需要进一步的帮助,请随时联系作者。
全部代码

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" : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36"
}
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下载成功")

标签:bangdan,榜单,入门,url,热歌,音乐,ID,爬取,id
From: https://blog.csdn.net/lwcwam/article/details/143877080

相关文章

  • 为什么黑客圈几乎一片男生?零基础入门到精通,收藏这篇就够了
    在一个全球顶尖的黑客大会上,人群熙熙攘攘,但一眼望去,却少有女性的身影。少数的女性黑客穿梭在各个展台间,显得格外醒目。许多技术设备与工具的演示台前,几乎都是年轻男性在仔细研究。这种场景在许多科技活动中早已屡见不鲜,背后原因值得我们探讨:为什么黑客领域总是男性主导,女性......
  • Python小白学习教程从入门到入坑------习题课3(基础巩固)
    目录一、选择题二、实战题2.1实战一:从键盘获取一个4位整数,分别输出个位、十位、百位、千位上的数字2.2实战二:根据父母身高预测儿子的身高一、选择题1、以下哪项不是Python语言的保留字符(C)A.FalseB.andC.trueD.if【解析】:true不是Python的保留字,正确的布......
  • 检验 C++ 入门能力:试试亲手实现日期类吧!
    ......
  • (新手向)动态规划从入门到精通 ——打家劫舍
    1.问题描述:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你不触动警报装置的......
  • eslint从入门到放弃(五)eslint配置之extends(共享配置)
    上文说了eslint配置之规则,今天说下ESLint配置中的extends(共享配置),前文传送门,eslint从入门到放弃(一)eslint入门eslint从入门到放弃(二)esLint配置之globalseslint从入门到放弃(三)ESLint配置之env(三)eslint从入门到放弃(四)eslint配置之规则大家好我是【小枫学幽默】,这是我eslin......
  • CSS入门(主要讲解字体,链接,列表,表格)
    一.CSS字体1.CSS字体属性要定义字体的加粗,大小,文字样式2.设置字体系列font-family属性设置文本的字体系列。font-family属性应该设置几个字体名称作为一种"后备"机制,如果浏览器不支持第一种字体,他将尝试下一种字体。注意:如果字体系列的名称超过一个字,它必须用引号,如Fo......
  • 【MySQL】MySQL表的基本操作入门指南
    ......
  • 适用于学生入门项目的汇总
    今天推荐几个项目,毕业设计可借鉴下面这几个GitHub项目,我不是简单的推荐项目,还会给出一些思路,基于这些GitHub项目魔改成自己的项目,至少还能增加一个项目经验不是?除了一些GitHub项目,老逛还会推荐一些渠道,从这些渠道你同样可以获取到一些实战项目和源码。提示:本文章推......
  • 零基础 AI 入门实战(深度学习 + Pytorch)
    零基础AI入门实战(深度学习+Pytorch)一、引言在当今这个科技飞速发展的时代,人工智能(AI)已经渗透到了我们生活和工作的方方面面。深度学习作为AI领域中的强大技术,更是展现出了巨大的应用潜力。而Pytorch作为一款广受欢迎的深度学习框架,为我们实现各种AI应用提供了便捷的工......
  • Djourney新手入门基础:AI摄影+AI设计+AI绘画——AIGC作图的探索之旅
    Djourney新手入门基础:AI摄影+AI设计+AI绘画——AIGC作图的探索之旅随着人工智能技术的飞速发展,AIGC(ArtificialIntelligenceforGenerativeContent)技术正在重塑我们的创作方式,特别是在摄影、设计和绘画领域。Djourney作为一款集成了AI技术的强大作图工具,为创意者提供了无限可能......