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

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

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

通过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、付费专栏及课程。

余额充值