前言
做爬虫最忌讳照本宣科,咱们直接切入正题。这次的目标很明确:用 Python 把网易云音乐的热歌榜歌曲抓下来存到本地。
在动手之前,简单过一下核心逻辑:爬虫本质就是模拟浏览器行为,发送 HTTP 请求拿到 HTML,然后解析提取数据。对于这个项目,关键在于找到那个包含歌曲列表的接口,以及对应的音频下载地址。
侦察与分析
打开目标页面,按 F12 打开开发者工具。切换到 Network 面板,刷新页面,观察哪些请求返回了数据。

我们需要关注的是那些返回 JSON 或包含大量 HTML 数据的请求。通过搜索关键字,可以定位到具体的数据源。

检查响应内容,确认是否包含了我们需要的歌曲信息。比如这里列出了 200 首歌的数据,说明这个接口是有效的。

接着查看请求头,确定数据来源地址及请求方法。通常这类静态榜单不需要复杂的鉴权,但为了保险起见,还是得带上 User-Agent 伪装成浏览器。

代码实现
准备好环境后,直接上代码。这里主要用到 requests 发请求,re 做正则匹配,os 处理文件路径。
注意: 下面的代码修复了原始导入语句的语法错误,并优化了路径处理,确保跨平台兼容性。
import re
import os
import requests
# 创建保存目录,如果已存在则不报错
filename = 'music'
if not os.path.exists(filename):
os.makedirs(filename)
# 请求网址(如果想换别的榜单,改这个 url 就行)
url = 'https://music.163.com/playlist?id=3778678'
# 伪造请求头,防止被反爬识别
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36'
}
response = requests.get(url, headers=headers)
html_data = re.findall(, response.text)
num_id, title html_data:
music_url =
music_content = requests.get(music_url, headers=headers)
file_path = os.path.join(filename, title + )
(file_path, ) f:
f.write(music_content.content)
()



