首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >爬取网易云音乐热歌榜:从入门到实战

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

原创
作者头像
LucianaiB
发布2024-11-21 16:26:06
发布2024-11-21 16:26:06
5750
举报

在文章开始之前,推荐一些很值得阅读的好文章!感兴趣的也可以去看一下哦!

今日推荐:Spring AI再更新:如何借助全局参数实现智能数据库操作与个性化待办管理

文章链接:https://cloud.tencent.com/developer/article/2464797

这篇文章详细介绍了Spring AI的新特性,特别是如何利用全局参数实现CRUD操作和个人待办管理,内容深入、实用性强,对开发者理解智能数据库交互和Spring AI的应用有很大帮助。

<font size="6" face="华文行楷" color="#0FFFFF">爬取网易云音乐热歌榜:从入门到实战</font>

<font size="5" face="华文行楷" color="#FF0000">**前提声明**</font>

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

<font size="5" face="华文行楷" color="#0F77FF">**目录**</font>

  1. 引言
  2. 环境准备
  3. 代码结果
  4. 代码解析
  • 1. 榜单ID与名称映射
  • 2. 用户输入
  • 3. 文件夹创建
  • 4. 发起网络请求
  • 5. 正则表达式提取
  • 6. 音乐下载
  • 7. 文件保存
  1. 结语
  2. 全部代码

<font size="5" face="华文行楷" color="#0000FF">**引言**</font>

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

<font size="5" face="华文行楷" color="#008000">**环境准备**</font>

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

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

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

代码语言:bash
复制
pip install requests

<font size="5" face="华文行楷" color="#FFA500">**代码解析**</font>

1. 榜单ID与名称映射

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

代码语言:python
复制
bangdan\_dict = {

    '19723756': '飙升榜',

    '3779629': '新歌榜',

    '2884035': '原创榜',

    '3778678': '热歌榜'

}

2. 用户输入

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

代码语言:python
复制
bangdan\_id = input('请输入你想下载的榜单ID:')

num\_songs = int(input('请输入要下载的歌曲数量:'))

3. 文件夹创建

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

代码语言:python
复制
filename = 'D:/网易云热歌榜/' + bangdan\_dict[bangdan\_id] + "\\"

if not os.path.exists(filename):

    os.makedirs(filename)

4. 发起网络请求

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

代码语言:python
复制
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和标题。

代码语言:python
复制
html\_data = re.findall(r'<li><a href="/song\?id=(\d+)">(.\*?)</a>', response.text)[:num\_songs]

6. 音乐下载

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

代码语言:python
复制
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. 文件保存

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

代码语言:python
复制
cleaned\_title = re.sub(r'[\\/\*?:"<>|]', '', title)

with open(os.path.join(filename, f"{cleaned\_title}.mp3"), 'wb') as file:

    file.write(music\_content)

<font size="5" face="华文行楷" color="#800080">**结语**</font>

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


<font size="5" face="华文行楷" color="#474500">**总结**</font>

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

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

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

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

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

<font size="5" face="华文行楷" color="#FF4500">**全部代码**</font>

代码语言: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下载成功")

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 榜单ID与名称映射
  • 2. 用户输入
  • 3. 文件夹创建
  • 4. 发起网络请求
  • 5. 正则表达式提取
  • 6. 音乐下载
  • 7. 文件保存
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档