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

简介: 本文介绍如何使用Python爬取网易云音乐热歌榜,包括环境准备、代码解析和实际操作步骤。通过定义榜单ID与名称映射、用户输入、文件夹创建、发起网络请求、正则表达式提取、音乐下载和文件保存等环节,手把手教你实现音乐下载功能。强调遵守网站协议,尊重版权和用户隐私,确保合法合规使用代码。

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

爬取网易云音乐热歌榜:从入门到实战 前提声明
  • 爬虫应遵守目标网站的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下载成功")
相关文章
|
5月前
|
JSON 数据格式 网络架构
技术心得:快手的小视频爬取
技术心得:快手的小视频爬取
362 1
|
4月前
|
数据采集 Python
揭秘淘宝商品信息:Python爬虫技术入门与实战指南
Python爬虫用于获取淘宝商品详情,依赖`requests`和`beautifulsoup4`库。安装这两个库后,定义函数`get_taobao_product_details`,发送GET请求模拟浏览器,解析HTML获取标题和价格。注意选择器需随页面结构更新,遵守爬虫政策,控制请求频率,处理异常,且数据只能用于合法目的。
|
数据采集 编解码 Python
Python爬虫实战(4) | 爬取历年中国电影票房排行榜
看了看后台,发现之前写的几篇有关爬虫实战的文章特别受欢迎,阅读量都是好几千那种 然后回头发现自己好久没写爬虫了,刚好写了个小小的爬虫 demo ,今天分享给大家
|
数据采集 Python
python爬虫爬取豆瓣电影排行榜
爬虫爬取豆瓣电影排行榜
|
存储 JSON 数据格式
pyhton爬取爱豆(李易峰)微博评论
今日目标:微博,以李易峰的微博为例:
168 0
|
Android开发
Python爬虫入门教程 45-100 Charles抓取兔儿故事-下载小猪佩奇故事-手机APP爬虫部分
1. Charles抓取兔儿故事背景介绍 之前已经安装了Charles,接下来我将用两篇博客简单写一下关于Charles的使用,今天抓取一下兔儿故事里面关于小猪佩奇的故事。爬虫编写起来核心的重点是分析到链接,只要把链接分析到,剩下的就好办了。
1254 0
|
Web App开发 存储 数据采集
Python爬虫入门教程 15-100 石家庄政民互动数据爬取
1. 石家庄政民互动数据爬取-写在前面 今天,咱抓取一个网站,这个网站呢,涉及的内容就是 网友留言和回复,特别简单,但是网站是gov的。网址为http://www.sjz.gov.cn/col/1490066682000/index.html 首先声明,为了学习,绝无恶意抓取信息,不管你信不信,数据我没有长期存储,预计存储到重装操作系统就删除。
2412 0
|
Web App开发 数据采集 JavaScript
|
数据采集 Python
网易云音乐爬虫
本文我要介绍的是用Python爬取网易云音乐全部歌曲的全部评论.我把它分为三步:第一步获取全部歌手的信息及其id号.第二步通过第一步获取到的歌手id号来获取全部歌手的全部热门歌曲及其id号.第三步根据获取到的歌曲id号来获取对应歌曲的全部评论.
2905 0
|
数据采集 Web App开发 JavaScript
Python爬虫实践-网易云音乐
1、前言 最近,网易的音乐很多听不到了,刚好也看到很多教程,跟进学习了一下,也集大全了吧,本来想优化一下的,但是发现问题还是有点复杂,最后另辟捷径,提供了简单的方法啊! 本文主要参考 python编写GUI版网易云音乐爬虫 后改写,有兴趣的可以看看文章...
2996 0