python3学习笔记之八——爬取百度音乐盒临时列表中的音乐

本文介绍了一种无需登录即可从百度音乐下载音乐的方法。通过解析百度音乐的临时列表,利用Fiddler抓包获取歌曲链接,并使用Python的requests库实现自动化下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

没事儿打开百度音乐,随便点点喜欢的音乐,音乐就会加到百度音乐盒的临时列表之中了,但是想将列表中的音乐下载到本地就要登录百度账号。

那能不能不登录就将列表中的音乐下载下来?

通过fiddler抓包分析一下:

可以看到这条post,songlink,看名字莫非就是歌曲的链接。查看一下详细的响应内容:

将这里的showlink复制下来,粘贴到浏览器中,直接提示下载了,显然这就是歌曲的链接。

那就只要将json里的showlink提取出来,下载就ok了!

通过requests.post(url,data)发送请求,data可以在这条请求头部看到:

将它复制下来

songIds=568320992%2C591395845%2C242078437%2C567299854%2C554926752%2C593443305%2C577326683&hq=0&type=m4a%2Cmp3&rate=&pt=0&flag=-1&s2p=-1&prerate=-1&bwt=-1&dur=-1&bat=-1&bp=-1&pos=-1&auto=-1

这时会发现里面有一些奇怪的字符编码,这里涉及到url编码。

通过urllib.parse中unquote解码可以得到:

'songIds=568320992,591395845,242078437,567299854,554926752,593443305,577326683&hq=0&type=m4a,mp3&rate=&pt=0&flag=-1&s2p=-1&prerate=-1&bwt=-1&dur=-1&bat=-1&bp=-1&pos=-1&auto=-1'

完整代码如下:

import requests,json
from urllib import request

#爬取百度播放列表里的音乐
class mp3_downloader(object):
def __init__(self):
self.url = 'http://play.baidu.com/data/music/songlink'
self.payload = {'songIds':'568320992,591395845,242078437,567299854,554926752,593443305,577326683',
'hq':'0',
'type':'m4a,mp3',
'pt':'0',
'flag':'-1',
's2p':'-1',
'prerate':'-1',
'bwt':'-1',
'dur':'-1',
'bat':'-1',
'bp':'-1',
'pos':'-1',
'auto':'-1'}

def get_url(self):
r = requests.post(self.url,data=self.payload)
h = json.loads(r.text)
p = h['data']
#for each in p['songList']:
# print('音乐地址:' + each['songLink'])
return p['songList']
def download(self,url):
for each in url:
request.urlretrieve(each['songLink'],filename=each['songName']+'.mp3')

if __name__ == '__main__':
dp = mp3_downloader()
url = dp.get_url()
dp.download(url)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值