跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python大前端算法

Python 爬虫实战:抓取网易云音乐热歌榜歌曲

Python 爬虫实战通过 requests 和 re 模块抓取网易云音乐热歌榜。步骤包括分析网页结构、定位 API 接口、编写正则提取数据并下载音频文件。重点在于模拟浏览器请求头及处理文件保存路径,确保合规使用。

DockerOne发布于 2026/3/24更新于 2026/9/1159 浏览
Python 爬虫实战:抓取网易云音乐热歌榜歌曲

背景与原理

网络爬虫(Web Crawler)是自动浏览网络并提取信息的程序,广泛应用于数据采集、索引构建等场景。理解其基本流程有助于编写更高效的脚本。

爬虫的基本原理

  1. 种子 URL:从一个或多个起点开始。
  2. 发送请求:通常是 HTTP GET 请求。
  3. 获取响应:服务器返回 HTML 内容。
  4. 解析内容:提取文本、链接或图片。
  5. 提取链接:将新发现的链接加入队列。
  6. 重复过程:直到达到停止条件。

合法性与道德

在开发过程中必须遵守以下原则:

  • 遵守 robots.txt:尊重网站对爬取范围的限制。
  • 避免过度抓取:控制频率,防止给服务器造成负担。
  • 尊重版权和隐私:不抓取受保护内容或用户隐私数据。
  • 获取许可:大规模抓取前最好获得管理员同意。

网络请求分析

打开目标页面后,使用浏览器开发者工具(F12)定位关键元素。通过 Network 面板刷新页面,搜索关键字,找到包含歌曲列表的接口。

观察请求头中的数据来源地址及请求方法,确认这是 AJAX 加载还是静态页面。通常我们需要模拟浏览器请求头来绕过简单的反爬机制。

代码实现

import os
import re
import requests

# 创建存储目录
folder = 'music'
if not os.path.exists(folder):
    os.makedirs(folder)

# 请求网址
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)

# 正则表达式提取数据
# r 前缀表示原始字符串,避免转义问题
# (\\d+): 捕获组,匹配一个或多个数字
# (.*?): 非贪婪匹配,直到遇到 </a>
html_data = re.findall(r'<li><a href="/song\\?id=(\\d+)">(.*?)</a>', response.text)

# 遍历提取出的元组
for num_id, title in html_data:
    # 构造音频下载链接
    music_url = f'https://music.163.com/song/media/outer/url?id={num_id}.mp3'
    
    # 获取二进制数据
    music_content = requests.get(music_url, headers=headers)
    
    # 保存文件
    with open(os.path.join(folder, title + '.mp3'), 'wb') as f:
        f.write(music_content.content)
    
    print(num_id, title)

运行结果

脚本执行后会在当前目录下生成 music 文件夹,其中包含下载的歌曲 MP3 文件。控制台会打印每首歌曲的 ID 和标题,方便核对进度。注意实际运行时需确保网络连接正常,且部分歌曲可能因版权原因无法直接下载。

目录

  1. 背景与原理
  2. 网络请求分析
  3. 代码实现
  4. 创建存储目录
  5. 请求网址
  6. 伪造请求头
  7. 发送请求
  8. 正则表达式提取数据
  9. r 前缀表示原始字符串,避免转义问题
  10. (\\d+): 捕获组,匹配一个或多个数字
  11. (.*?): 非贪婪匹配,直到遇到 </a>
  12. 遍历提取出的元组
  13. 运行结果

更多推荐文章

查看全部
  • Vue 动态组件实战:利用 <component> 实现视图切换
  • 大模型幻觉问题治理:技术体系、工程实践与未来演进
  • Visual Studio GitHub Copilot 隐私设置及代码数据共享控制
  • 数据结构:常见时间与空间复杂度解析
  • 接入第三方 OpenAI 兼容模型到 GitHub Copilot
  • MySQL 8.4 Windows 压缩包安装配置指南
  • 大模型技术通识与基础指南:生态、模型及微调方法
  • MiniMax-M2.5 开源:编程与智能体成本效率双突破
  • Qwen3.5 开源模型详解:参数对比与全场景选型指南
  • AI 产品经理与大模型开发资源汇总
  • OpenManus 项目导论:从“手写”到“智能写作”的进化史
  • 绿联云 NAS 配置 WebDAV 实现公网文献同步
  • Visual Studio 配置 C++ OpenCV 环境实战指南
  • 基于深度学习的宠物识别系统设计与实现
  • Selenium webdriver_manager 浏览器驱动管理指南
  • 大语言模型应用安全入门
  • 动态规划专题:子序列问题的核心思路与实战
  • Java 核心语法与并发编程实战:66 个关键代码示例
  • 机器学习:支持向量机(SVM)算法详解
  • FastAPI 架构深度解析:依赖注入、后台任务与 WebSocket 实战

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online