4.4,4.5日记

这两天一直在学爬歌曲,所以准备把两天所学的放在一起。


首先进入到qq音乐的歌曲播放界面以获取下载链接,进入到播放界面以后获得的链接如下:
http://183.60.131.239/amobile.music.tc.qq.com/C400000gtiIq36mN3p.m4a?guid=6637842640&vkey=A07D2D3E8DC68474291019B6846A2EDC03FDDC59151F47309018A4338F1CCF5C8F8167D034F4DFC02AF6D2FC956C2C0BA2E2983646380F75&uin=0&fromtag=66
http://113.96.98.151/amobile.music.tc.qq.com/C400001TXSYu1Gwuwv.m4a?guid=6637842640&vkey=1FC05BD1A95DE658A36A1F5A0DA891442FEB619A07CA455D9F7333CF8A007FFB69CF8147784A1A0C9F87E4FBB26694320146E23DE75735EB&uin=0&fromtag=66
发现183.60.131.239与113.96.98.151不一样,原因是两次关闭了播放界面再进入,在一个播放界面里面是一样的,分析其他media类型的url,发现每次都有 http://dl.stream.qqmusic.qq.com/ 与 http://isure.stream.qqmusic.qq.com/ 这两个,并且他们后面跟着的东西与播放链接很相似,
于是将 http://dl.stream.qqmusic.qq.com/ 与C400后面的东西连接起来,发现与原来一模一样,所以前面可以用http://dl.stream.qqmusic.qq.com/代替。

继续分析网址后面,发现他们在C400后面及vkey=后面有不同的地方,翻查Headers,发现下面:
guid: 6637842640
vkey: 711437E15812C5C27A49E86F6A0A743CE6E9211A234E214496A9662345293C4CB57501C048874E15CBA175279A72C070E5FE8BC4AD61611C
uin: 0
fromtag: 66
guid: 6637842640
vkey: 110523EDABE26B77501FD74806FFAB683D99C555A665444A5106D960BC37EE912D332B7AB16928145F2090E385B3B6F97FF8CE93D5BD0A8A
uin: 0
fromtag: 66
只有vkey不一样,这也证实了刚才的不同猜想,所以从vkey入手。

随便复制一个vkey,退出播放界面了,在歌单界面中,ctrl+F搜索一下,em什么都没搜到,以为应该在歌单界面搜到母vkey能把所有vkey都找出来。既然不行,返回播放界面搜索,发现一个新东西:
musicg.fcg,虽然不知道是什么东西,但是应该有用,preview看一下,然后看到这个:
purl: "C400000gtiIq36mN3p.m4a?guid=6637842640&vkey=711437E15812C5C27A49E86F6A0A743CE6E9211A234E214496A9662345293C4CB57501C048874E15CBA175279A72C070E5FE8BC4AD61611C&uin=0&fromtag=66"
不就是在http://dl.stream.qqmusic.qq.com/后面的东西嘛,看一下Headers,最下面有:
-: getplaysongvkey6109285113723608
g_tk: 5381
loginUin: 0
hostUin: 0
format: json
inCharset: utf8
outCharset: utf-8
notice: 0
platform: yqq.json
needNewCode: 0
data: {"req_0":{"module":"vkey.GetVkeyServer","method":"CgiGetVkey","param":{"guid":"6637842640","songmid":["002Nrq7o0T52lC"],"songtype":[0],"uin":"0","loginflag":1,"platform":"20"}},"comm":{"uin":0,"format":"json","ct":24,"cv":0}}
对比两个链接,发现最下面的songmid不一样,那就把songmid复制出来搜索吧,这一次在歌单页面搜到东西了,虽然两个一模一样的看不懂,随便看一个吧,preview看一下:
在songlist里面的里面看到了songmid,嗯,继续看Headers,又有这个:
type: 1
json: 1
utf8: 1
onlysong: 0
disstid: 6907320283
g_tk: 5381
loginUin: 0
hostUin: 0
format: json
inCharset: utf8
outCharset: utf-8
notice: 0
platform: yqq.json
needNewCode: 0
又对比了一下,两个歌手的disstid不一样,一个歌手对应一个歌单,那是不是改disstid就能得到全部歌单了,应该是吧。
退到全部歌单,ctrl+F搜索disstid,什么都没有,哦对它只显示一页的东西,我那个歌手是搜索得到的不是在第一页,那我就在第一页随便找个歌单,获得disstid再搜索,这次就找到了那一页的20个disstid。

 

先学着爬这20个歌单吧。
反推回去,百度看到都要传入referer参数和user-agent,那就先构造一个:在全部歌单里面的:
header_song_sheet = {
            'Referer': 'https://y.qq.com/portal/playlist.html',
            'User-Agent': 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'
        }
然后推下去,得到这个链接,找出disstid,进入一个歌单,找到songmid,同时要知道歌手和歌名,然后构造下载链接,循环下载。

emmm写了160行代码,从来没写过这么长的,经过了一系列的debug,终于成功爬了这些歌曲,之前怕了空壳发现爬了600多个,后面爬歌曲,爬了100多以后,网速实在不行,关了。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值