我的第一个音乐元素浏览项目上传至Github啦!
网易云音乐元数据探索工具 - 仅供学习网络爬虫技术
该项目是我用来学习音乐爬虫技术时所写的,由于我需遵重别人的著作权以及各平台协议,我将移除了下载音乐的功能模块,保留了整体的代码框架,这也算是我对暑假复习这一阶段的整合,欢迎光临我的新项目!
重要声明
⚠️ 本项目仅用于技术学习目的 ⚠️
- 本工具不提供任何音乐下载功能
- 所有音乐资源链接均指向官方正版平台
- 禁止用于任何商业用途
- 请支持正版音乐平台
- 使用本工具即表示您同意尊重版权和平台用户协议
功能说明
本工具提供以下功能:
- 搜索网易云音乐元数据(歌曲名称、歌手、专辑、时长等)
- 获取歌曲官方播放链接
- 学习网络爬虫技术实践(包括参数加密、请求处理等)
使用指南
环境准备
git clone https://github.com/Couioly/music-explorer.git
cd music-explorer
pip install -r requirements.txt
运行程序
python main.py
使用流程
- 启动程序:运行后会显示欢迎界面和使用说明
+-------------------------------------------------------------------------+__ ___ _ __ ___ __ __ __ / |/ /_ _______(_)____/ |/ /__ / /_____ _____/ /___ _/ /_____ _/ /|_/ / / / / ___/ / ___/ /|_/ / _ \/ __/ __ `/ __ / __ `/ __/ __ `// / / / /_/ (__ ) / /__/ / / / __/ /_/ /_/ / /_/ / /_/ / /_/ /_/ /
/_/ /_/\__,_/____/_/\___/_/ /_/\___/\__/\__,_/\__,_/\__,_/\__/\__,_/ @作者:Couioly/姜玖儿@微信公众号:Q哩编程@Github: https://www.github.com/Couioly/
+-------------------------------------------------------------------------+
- 输入搜索关键词:输入歌手名或歌曲名
🪶 请输入音乐关键字[歌手/歌名]: 周杰伦
- 辅助打开开发者工具(可选):
🪶 是否需要辅助打开开发者工具? [y/n]: y
😳 注意:接下来将自动打开网页...
- 获取加密参数:
1) 在浏览器中打开开发者工具(F12)
2) 切换到 网络(Network) 标签页
3) 在筛选器中输入 web?csrf_token=
4) 复制找到请求的:- params 参数- encSecKey 参数- Cookie 值
- 输入参数:
🪶 params: 82d8e9e9c8c7d6e5f4a3b2c1d0e9f8a7...
🪶 encSecKey: 6d5f4a3b2c1d0e9f8a782d8e9e9c8c7d...
🪶 Cookie: _ntes_nuid=abcdef123456; _ntes_nnid=...
- 查看搜索结果:
🔍 找到 15 首相关歌曲:
1. 晴天 - 周杰伦
2. 七里香 - 周杰伦
3. 青花瓷 - 周杰伦
4. ...
🪶 输入序号查看详情(0查看全部,q退出): 1
- 查看歌曲详情:
🎵 标题: 晴天
👤 歌手: 周杰伦
💿 专辑: 叶惠美
⏱️ 时长: 4:29
🔗 官方链接: https://music.163.com/#/song?id=123456
- 继续搜索或退出:
🪶 继续搜索? [y/n]: n
感谢使用,请支持正版音乐! 😊
技术实现
核心模块
- 加密参数处理 (
arg_keys.js
)
- 实现网易云音乐API的加密算法
- 生成请求所需的加密参数
- 元数据获取 (
Crawl_Music_Info.py
)
- 发送加密请求到网易云音乐API
- 解析返回的JSON数据
- 提取歌曲元数据信息
- 用户界面 (
main.py
)
- 提供友好的命令行界面
- 引导用户完成搜索流程
- 展示歌曲详细信息
- 工具函数 (
Crawl_Tools.py
)
- 格式化歌曲时长
- 生成官方播放链接
- 美化歌曲信息展示
数据安全
- 所有请求均通过网易云音乐官方API
- 不存储任何用户凭证或敏感信息
- 工具运行后不会保留任何Cookie数据
常见问题
为什么需要手动获取参数?
网易云音乐的API使用了复杂的加密机制来防止自动化爬取。手动获取参数:
- 符合网站使用条款
- 避免触发反爬虫机制
- 提供学习加密技术的机会
获取参数时遇到问题怎么办?
- 确保已登录网易云音乐官网
- 确保在开发者工具中正确筛选请求
- 检查复制的参数是否完整
- 尝试刷新页面后重新获取参数
为什么不能直接下载音乐?
- 直接下载音乐可能侵犯版权
- 网易云音乐的版权协议禁止未经授权的下载
- 本项目旨在学习爬虫技术,而非获取内容
部署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 账户
- 登录你的 GitHub 账号,点击右上角头像 → Settings
- 在左侧菜单找到 SSH and GPG keys → 点击右上角 New SSH key
- 在 Title 栏填写一个标识(例如 “我的笔记本电脑”)
- 在 Key 栏粘贴刚才复制的公钥内容
- 点击 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.md
和main.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