前言
大家早好、午好、晚好吖 ❤ ~欢迎光临本文章
环境使用:
-
Python 3.8
-
Pycharm
模块使用:
-
requests >>> pip install requests
-
re
win + R 输入cmd 输入安装命令 pip install 模块名
(如果你觉得安装速度比较慢, 你可以切换国内镜像源)
代码实现步骤 <基本四个步骤>
获取音ID:
-
发送请求, 模拟浏览器对于url地址发送请求
url地址: 榜单页面url
-
获取数据, 获取 榜单页面 网页源代码
-
解析数据, 提取我们想要的音ID
获取音链接以及名字
-
发送请求, 模拟浏览器对于url地址发送请求
url地址: 歌曲信息数据包链接 <需要传入音ID>
-
获取数据, 获取 歌曲信息数据包 数据内容
-
解析数据, 提取我们想要的歌链接 以及 歌名字
-
保存数据, 把歌保存到本地文件
代码展示
导入模块
# 导入数据请求模块
import requests
# 导入正则表达式模块
import re
# 导入进度条模块
from tqdm import tqdm
“”"
- 发送请求, 模拟浏览器 对于 url地址 发送请求
“”"
模拟浏览器 --> headers 请求头
headers = {
# User-Agent 用户代理 表示浏览器基本身份信息
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36'
}
请求链接 榜单页面的url地址
url = 'https://*****/yy/rank/home/1-6666.html?from=rank'
发送请求
response = requests.get(url=url, headers=headers)
“”"
-
获取数据, 获取 榜单页面 网页源代码
-
解析数据, 提取我们想要的音乐ID
re.findall(‘什么数据’, ‘什么地方’) --> 调用re模块里面findall方法 <找到所有我们想要的数据内容>
告诉程序, 你要在什么地方, 去找什么数据
“”"
歌曲ID
music_id_list = re.findall('data-index="\d+" data-eid="(.*?)">', response.text)
for循环遍历
<相当于把盒子里面东西一个一个拿出来, 然后用music_id变量名接收数据> 列表数据容器 --> 装东西盒子
for music_id in music_id_list:
“”"
-
发送请求, 模拟浏览器对于url地址发送请求
url地址: 歌曲信息数据包链接 <需要传入音乐ID>
“”"
# f'{}' --> 字符串格式化的方法, 相当于插队<平移>
link = f'https://****/yy/index.php?r=play/getdata&dfid=3x7wHk3au0aA4fBz6d1luNHw&appid=1014&mid=79ccf0ae0621ad3b03cebab6d7ef206d&platid=4&encode_album_audio_id={music_id}&_=1683548032595'
# 发送请求
response_1 = requests.get(url=link, headers=headers)
“”"
-
解析数据, 提取我们想要的歌曲链接 以及 歌曲名字
字典取值 —> 键值对取值
dict = {‘键’: ‘值’,‘键1’: ‘值1’}
dict[‘键’]
json字典数据, 提取一层一层提取
“”"
歌名
title = response_1.json()['data']['audio_name']
歌链
play_url = response_1.json()['data']['play_url']
print(title, play_url)
“”"
-
保存数据, 保存到本地文件夹
对于歌曲链接地址发送请求 然后获取二进制数据
方式方法有很多, 可以选择你自己比较喜欢, 或者选择常用
“”"
获取歌曲内容
content = requests.get(url=play_url, headers=headers).content
# 'music\\'<文件夹路径相对路径> + title<文件名> + '.mp3'<文件格式> mode='wb' 保存方式
with open('music\\' + title + '.mp3', mode='wb') as f:
# 写入内容
f.write(content)
经典报错:
-
requests.exceptions.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
报错原因: 获取的数据不是完整json数据格式
解决: 删掉链接中callback参数
-
KeyError: ‘audio_name’
报错原因: 没有这个键
尾语 💝
好了,今天的分享就差不多到这里了!
完整代码、更多资源、疑惑解答直接点击下方名片自取即可。
对下一篇大家想看什么,可在评论区留言哦!看到我会更新哒(ง •_•)ง
喜欢就关注一下博主,或点赞收藏评论一下我的文章叭!!!