Python批量下载音乐实战:解析API与正则提取

唐可
唐可
发布时间:2026-10-13| 5人浏览过
原创

本文详细介绍如何利用Python批量下载在线音乐。通过requests库发送请求,结合正则表达式提取歌曲ID与真实播放链接,解析隐藏的API接口数据。文章涵盖环境配置、网页分析、URL拼接及完整代码实现,帮助开发者掌握从获取数据到保存文件的全流程操作。

Python批量下载音乐实战:解析API与正则提取

本文详解基于Python实现音乐批量下载的方法,通过示例代码展示具体步骤,为相关学习与工作提供参考。

音乐丰富了生活,但许多平台仅支持在线播放。作为技术人员,我们希望通过技术手段实现本地存储。

核心知识点与环境配置

本文涉及的核心知识点包括:

  • requests
  • 正则表达式

开发环境配置如下:

  • 版本:anaconda5.2.0(python3.6.5)
  • 编辑器:pycharm

需安装的第三方库包括:

  • requests
  • parsel

网页分析与API定位

接下来进行网页结构分析。

目标站点地址为:http://music.taihe.com/search?key=%E9%99%88%E7%B2%92

首先需要定位音乐的真实播放地址。

以陈粒的歌曲《走马》为例进行分析。

打开浏览器开发者工具,切换到Network标签页,筛选Media类别,刷新页面即可捕获音乐的真实请求地址。

该地址无法直接从网页源码中读取,说明百度音乐对链接进行了隐藏处理。这种情况通常由JavaScript动态拼接或加密请求链接,或者数据被隐藏导致。由于不确定具体机制,需进一步分析请求数据。

分析发现,真实音乐地址存在于如下API接口中:http://musicapi.taihe.com/v1/restserver/ting?method=baidu.ting.song.playAAC&format=jsonp&callback=jQuery17206453751179783578_1544942124991&songid=243093242&from=web&_=1544942128336

请求该API返回的是JSON格式数据,对应Python中的字典类型。利用字典操作规则即可提取所需数据。

URL结构与批量下载逻辑

接下来通过URL拼接获取所有必要数据。

在获取单首音乐地址后,需进一步分析该URL的结构,以寻找批量下载所有音乐的方法。

仔细观察URL参数,发现问号后的from参数与_参数即使缺失,也不影响数据请求的正常返回。

此外,参数中的songid即为歌曲的唯一标识ID,而from参数用于标识来源平台。

因此,在批量下载音乐时,只需获取歌曲的songid,即可通过该接口下载所有目标歌曲。

批量获取歌曲ID方法

下面介绍如何批量获取songid。

 

使用开发者工具查看网页源码,可定位songid的位置。若分析歌手页面的URL,同样可以构造相应的请求来获取ID列表。

至此,网页分析部分结束。

效果展示与代码实现

以下是程序运行的实际效果展示。

 

完整代码实现如下:


import re
import requests
​
def get_songid():
  """获取音乐的songid"""
  url = 'http://music.taihe.com/artist/2517'
  response = requests.get(url=url)
  html = response.text
  sids = re.findall(r'href="/song/(\d+)" rel="external nofollow" ', html)
  return sids
​
def get_music_url(songid):
  """获取下载链接"""
  api_url = f'http://musicapi.taihe.com/v1/restserver/ting?method=baidu.ting.song.playAAC&format=jsonp&songid={songid}&from=web'
  response = requests.get(api_url.format(songid=songid))
  data = response.json()
  print(data)
  try:
    music_name = data['songinfo']['title']
    music_url = data['bitrate']['file_link']
    return music_name, music_url
  except Exception as e:
    print(e)
​
def download_music(music_name, music_url):
  """下载音乐"""
  response = requests.get(music_url)
  content = response.content
  save_file(music_name+'.mp3', content)
​
def save_file(filename, content):
  """保存音乐"""
  with open(file=filename, mode="wb") as f:
    f.write(content)
if __name__ == "__main__":
  for song_id in get_songid():
    music_name, music_url = get_music_url(song_id)
    download_music(music_name, music_url)

以上内容为本文全部知识,希望能为读者提供帮助,欢迎支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。