当前位置: 首页 > ds >正文

我的第一个音乐元素浏览项目上传至Github啦!

网易云音乐元数据探索工具 - 仅供学习网络爬虫技术

该项目是我用来学习音乐爬虫技术时所写的,由于我需遵重别人的著作权以及各平台协议,我将移除了下载音乐的功能模块,保留了整体的代码框架,这也算是我对暑假复习这一阶段的整合,欢迎光临我的新项目!

重要声明


⚠️ 本项目仅用于技术学习目的 ⚠️

  1. 本工具不提供任何音乐下载功能
  2. 所有音乐资源链接均指向官方正版平台
  3. 禁止用于任何商业用途
  4. 请支持正版音乐平台
  5. 使用本工具即表示您同意尊重版权和平台用户协议

功能说明


本工具提供以下功能:

  • 搜索网易云音乐元数据(歌曲名称、歌手、专辑、时长等)
  • 获取歌曲官方播放链接
  • 学习网络爬虫技术实践(包括参数加密、请求处理等)

使用指南


环境准备

git clone https://github.com/Couioly/music-explorer.git
cd music-explorer
pip install -r requirements.txt

运行程序

python main.py

使用流程

  1. 启动程序:运行后会显示欢迎界面和使用说明
+-------------------------------------------------------------------------+__  ___           _      __  ___     __            __      __       /  |/  /_  _______(_)____/  |/  /__  / /_____ _____/ /___ _/ /_____ _/ /|_/ / / / / ___/ / ___/ /|_/ / _ \/ __/ __ `/ __  / __ `/ __/ __ `// /  / / /_/ (__  ) / /__/ /  / /  __/ /_/ /_/ / /_/ / /_/ / /_/ /_/ / 
/_/  /_/\__,_/____/_/\___/_/  /_/\___/\__/\__,_/\__,_/\__,_/\__/\__,_/  @作者:Couioly/姜玖儿@微信公众号:Q哩编程@Github: https://www.github.com/Couioly/
+-------------------------------------------------------------------------+
  1. 输入搜索关键词:输入歌手名或歌曲名
🪶 请输入音乐关键字[歌手/歌名]: 周杰伦
  1. 辅助打开开发者工具(可选):
🪶 是否需要辅助打开开发者工具? [y/n]: y  
😳 注意:接下来将自动打开网页...
  1. 获取加密参数
1) 在浏览器中打开开发者工具(F12)
2) 切换到 网络(Network) 标签页
3) 在筛选器中输入 web?csrf_token=
4) 复制找到请求的:- params 参数- encSecKey 参数- Cookie 值
  1. 输入参数
🪶 params: 82d8e9e9c8c7d6e5f4a3b2c1d0e9f8a7...  
🪶 encSecKey: 6d5f4a3b2c1d0e9f8a782d8e9e9c8c7d...  
🪶 Cookie: _ntes_nuid=abcdef123456; _ntes_nnid=...
  1. 查看搜索结果
🔍 找到 15 首相关歌曲:
1. 晴天 - 周杰伦
2. 七里香 - 周杰伦
3. 青花瓷 - 周杰伦
4. ...
🪶 输入序号查看详情(0查看全部,q退出): 1
  1. 查看歌曲详情
🎵 标题: 晴天  
👤 歌手: 周杰伦  
💿 专辑: 叶惠美  
⏱️ 时长: 4:29  
🔗 官方链接: https://music.163.com/#/song?id=123456
  1. 继续搜索或退出
🪶 继续搜索? [y/n]: n  
感谢使用,请支持正版音乐! 😊

技术实现


核心模块

  1. 加密参数处理 (arg_keys.js)
  • 实现网易云音乐API的加密算法
  • 生成请求所需的加密参数
  1. 元数据获取 (Crawl_Music_Info.py)
  • 发送加密请求到网易云音乐API
  • 解析返回的JSON数据
  • 提取歌曲元数据信息
  1. 用户界面 (main.py)
  • 提供友好的命令行界面
  • 引导用户完成搜索流程
  • 展示歌曲详细信息
  1. 工具函数 (Crawl_Tools.py)
  • 格式化歌曲时长
  • 生成官方播放链接
  • 美化歌曲信息展示

数据安全

  • 所有请求均通过网易云音乐官方API
  • 不存储任何用户凭证或敏感信息
  • 工具运行后不会保留任何Cookie数据

常见问题


为什么需要手动获取参数?

网易云音乐的API使用了复杂的加密机制来防止自动化爬取。手动获取参数:

  1. 符合网站使用条款
  2. 避免触发反爬虫机制
  3. 提供学习加密技术的机会

获取参数时遇到问题怎么办?

  1. 确保已登录网易云音乐官网
  2. 确保在开发者工具中正确筛选请求
  3. 检查复制的参数是否完整
  4. 尝试刷新页面后重新获取参数

为什么不能直接下载音乐?

  1. 直接下载音乐可能侵犯版权
  2. 网易云音乐的版权协议禁止未经授权的下载
  3. 本项目旨在学习爬虫技术,而非获取内容

部署Github项目出现的问题

创建 SSH 密钥并用于 GitHub 上传项目

步骤1:检查现有 SSH 密钥

在生成新的 SSH 密钥之前,应检查本地计算机中是否有现有密钥。

1)打开Git Bash(吉特狂欢).

2)输入以查看是否存在现有的 SSH 密钥。ls -al ~/.ssh

$ ls -al ~/.ssh
# 命令执行后将显示系统中 `~/.ssh` 目录下的文件列表

3)检查目录列表,看看您是否已经拥有公用 SSH 密钥。默认情况下,GitHub 支持的公钥的文件名为以下文件名之一。

  • _id_rsa.pub_
  • _id_ecdsa.pub_
  • _id_ed25519.pub_

提示:如果收到 _~/.ssh_ 不存在的错误,则默认位置中没有现有的 SSH 密钥对。您可以在下一步中创建新的 SSH 密钥对。

4)生成新的 SSH 密钥或上传现有密钥。

  • 如果您没有受支持的公钥和私钥对,或者不想使用任何可用的公钥和私钥对,请生成新的 SSH 密钥。
  • 如果看到列出了要用于连接到 GitHub 的现有公钥和私钥对(例如 _id_rsa.pub__id_rsa_),则可以将密钥添加到 ssh-agent

步骤2:生成新的 SSH 密钥

您可以在本地计算机上生成新的 SSH 密钥。生成密钥后,可以在 GitHub.com 上将公钥添加到帐户,以便通过 SSH 对 Git作进行身份验证。

1) 打开Git Bash。

2) 粘贴下面的文本,将示例中使用的电子邮件替换为您的 GitHub 电子邮件地址。

ssh-keygen -t ed25519 -C "your_email@example.com"

注意:如果您使用的是不支持 Ed25519 算法的旧系统,请使用:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

执行后会出现提示:

  • 首先询问密钥保存路径,直接按回车使用默认路径(~/.ssh/id_ed25519
Enter file in which to save the key (/c/Users/YOU/.ssh/id_ALGORITHM): 回车
  • 然后会提示设置密码(可选),直接按回车跳过即可(无需密码)
Enter passphrase (empty for no passphrase): 输入密码
Enter same passphrase again: 再次输入密码

生成成功后,再次执行 ls -al ~/.ssh 就能看到新生成的密钥文件:

  • id_ed25519(私钥,务必保密,不要分享给任何人)
  • id_ed25519.pub(公钥,需要添加到 GitHub 的文件)

步骤3:查看并复制公钥内容

执行下列命令将会显示一段以 ssh-ed25519 开头、以你的邮箱结尾的文本,完整复制这段内容(包括所有字符,不要遗漏或多复制)

cat ~/.ssh/id_ed25519.pub

步骤4:将公钥添加到 GitHub 账户

  1. 登录你的 GitHub 账号,点击右上角头像 → Settings
  2. 在左侧菜单找到 SSH and GPG keys → 点击右上角 New SSH key
  3. Title 栏填写一个标识(例如 “我的笔记本电脑”)
  4. Key 栏粘贴刚才复制的公钥内容
  5. 点击 Add SSH key 完成添加(可能需要输入 GitHub 密码确认)

步骤5:测试 SSH 连接

在git bash终端输入以下命令,测试是否配置成功:

ssh -T git@github.com

首次连接会出现确认提示,输入 yes 后回车

Are you sure you want to continue connecting (yes/no/[fingerprint])?

然后输入SSH密钥密码后回车

Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Enter passphrase for key '/c/Users/31245/.ssh/id_ed25519':

如果看到类似以下内容,说明配置成功:

Hi 你的GitHub用户名! You've successfully authenticated, but GitHub does not provide shell access.

步骤6:上传项目到 GitHub

1)先在 GitHub 上创建一个新仓库(Repository),获取仓库的 SSH 地址(格式类似 git@github.com:用户名/仓库名.git

2) 在本地项目文件夹中执行:

# 初始化仓库(如果尚未初始化)
git init# 添加文件到暂存区
git add .# 提交文件
git commit -m "首次提交"# 关联远程仓库
git remote add origin git@github.com:用户名/仓库名.git# 推送到GitHub
git push -u origin main

完成后,你的项目就成功上传到 GitHub 了。以后每次修改后,只需使用 git add .git commit -m "描述"git push 即可更新代码。

换行符警告

当执行git add .命令时出现警告提示,如下图示例:

warning: in the working copy of 'Crawl_Tools.py', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'README.md', LF will be replaced by CRLF the next time Git touches it

原因


在 Windows 系统中,默认的换行符是 CRLF\r\n),而在 Unix/Linux/MacOS 系统中,默认的换行符是 LF\n)。当你在 Windows 上使用 Git 并且没有配置好换行符的处理方式时,Git 可能会在添加文件(git add)或检出文件(git checkout)时,对换行符进行自动转换,从而给出这样的警告。

解决方法


你可以通过配置 Git 的换行符处理策略来解决这个问题,有以下两种常见的配置方式:

方式一:让 Git 自动处理换行符

在 Git 仓库所在的目录下,打开终端(如 Git Bash),执行以下命令:

git config core.autocrlf true

这个配置的作用是:

  • 当你执行 git add 时,Git 会将文件中的 CRLF 转换为 LF 后再存入版本库。
  • 当你执行 git checkout 时,Git 会将版本库中的 LF 转换为 CRLF 后再检出到工作目录。
方式二:保持换行符不变(适合跨平台协作场景)

如果你希望保持文件中的换行符不变(比如项目需要在多个平台上协作,希望统一使用 LF 作为换行符),可以执行以下命令:

git config core.autocrlf input

这个配置的作用是:

  • 当你执行 git add 时,Git 会将文件中的 CRLF 转换为 LF 后再存入版本库。
  • 当你执行 git checkout 时,Git 不会对换行符进行转换,保持版本库中的 LF 不变。

配置完成后,再执行 git add . 时,就不会再出现这样的警告了。

后续新增文件的提交流程

1)进入项目根目录

cd /文件路径

2)添加文件到暂存区

git add 所需上传的文件名

3)提交更改(使用明确的提交信息)

git commit -m "docs: 添加项目***文件"

4)推送远程仓库(默认分支通常为main或master)

git push origin main  # 若分支不同,请将main替换为你的分支名称

5)刷新 GitHub 仓库页面,文件会自动显示在仓库主页,文件会出现在仓库文件列表中。

后续修改文件的提交流程

1)首先修改所需修改的文件

2)修改完成后,可以使用git status来查看已修改的文件是否正确,命令和执行结果如下:

git status

此处示例运行结果表示修改的文件为README.mdmain.py

On branch main
Changes not staged for commit:(use "git add <file>..." to update what will be committed)(use "git restore <file>..." to discard changes in working directory)modified:   README.mdmodified:   main.pyno changes added to commit (use "git add" and/or "git commit -a")

3)使用git add命令将所修改的文件添加至暂存区

git add README.md main.py

4)使用git commit -m提交更改的信息,如下命令:

git commit -m "修改内容:
- 修复 README.md 文件中的启动命令错误
- 修改 main.py 文件的头部信息参数错误"

也可以使用明确的提交信息进行提交,如下列命令:

git commit -m "fix: 同时修复 README.md 的命令错误和 main.py 的参数错误"

提交信息规范建议:

  • feat:新功能
  • fix:错误修复
  • docs:文档更新
  • style:样式调整

5)将修改文件推送至Github上,命令如下:

git push origin main

文章源地址:我的第一个音乐元素浏览项目上传至Github啦!
Github: Github | Couioly

http://www.xdnf.cn/news/18039.html

相关文章:

  • MyBatis 与 MyBatis-Plus 的区别
  • STM32L051同时处理Alarm A和Alarm B中断
  • SSH协议的GIT转换
  • 系统介绍pca主成分分析算法
  • flutter开发(二)检测媒体中的静音
  • Day59--图论--47. 参加科学大会(卡码网),94. 城市间货物运输 I(卡码网)
  • 【DDIA】第二部分:分布式数据
  • 应用层协议——HTTP
  • 抽奖程序web程序
  • JavaScript 基础实战:DOM 操作、数据类型与常见需求实现
  • 项目管理工具
  • NPM 、 NPX
  • 清除 pnpm 缓存,解决不同源安装依赖包失败的问题
  • electron之win/mac通知免打扰
  • 【R语言】R 语言中 gsub 与正则表达式详解(含 POSIX 与 Perl 风格实例)
  • 汽车电子:现代汽车的智能核心
  • [激光原理与应用-287]:理论 - 波动光学 - 电磁波既能承载能量,又能承载信息?
  • 【软件设计模式】前置知识类图、七大原则(精简笔记版)
  • Spark 运行流程核心组件(二)任务调度
  • EN/IEC 55015 照明设备的电磁兼容标准安全
  • Docker Compose部署Clickhouse最新版
  • 【LINUX网络】HTTP协议基本结构、搭建自己的HTTP简单服务器
  • 为什么游戏会出现“卡顿”:`clock.tick()` v.s. `clock.get_fps()`
  • 【uni-app】根据角色/身份切换显示不同的 自定义 tabbar
  • 线性代数 · 直观理解矩阵 | 空间变换 / 特征值 / 特征向量
  • CERT/CC警告:新型HTTP/2漏洞“MadeYouReset“恐致全球服务器遭DDoS攻击瘫痪
  • 机械加工元件——工业精密制造的璀璨明珠
  • Day14: Flask太空站搭建指南:从零到超光速的Web开发之旅
  • git clone https://gh.llkk.cc/
  • C++从入门到实战(十九)C++ vector容器及其常用接口