打开千千音乐后,播放一首歌曲,按F12打开开发者模式
点击网络(network),然后ctrl+R刷新,会出现很多异步json文件
找到这个音乐文件,然后转到这个音乐的链接
这就是我们需要的音乐了
但是这个链接并不在网页的html文件里,不可能一个一个去找这个链接,但我经过对比这些链接发现想要直接找到这些链接实在困难。
例如下面的链接,同样的歌曲在不同的时间打开链接都不一样
https://audio04.dmhmusic.com/71_53_T10053095774_128_4_1_0_sdk-cpm/cn/0209/M00/BE/C2/ChR47F17yMGAFECWAEsuYO4hQaw972.mp3?xcode=58a2a02fd5a6a5ef7c3b8bbc5e675ff2644cd4b
https://audio04.dmhmusic.com/71_53_T10053095774_128_4_1_0_sdk-cpm/cn/0209/M00/BE/C2/ChR47F17yMGAFECWAEsuYO4hQaw972.mp3?xcode=f2c8900a8fed3a1a7c3bad603ff8602a1b41f41
https://audio04.dmhmusic.com/71_53_T10046201595_128_4_1_0_sdk-cpm/cn/0208/M00/69/E6/ChR461srcT6ABGYSAC8clDGkoMA259.mp3?xcode=6e6286676a19d2ce7c3bc88d4db783d2f8c6b2a
https://audio04.dmhmusic.com/71_53_T10046201598_128_4_1_0_sdk-cpm/cn/0208/M00/69/E6/ChR461srcVuAZpnhAEWuio_A6IM676.mp3?xcode=065765094adc4b2b7c3bce0334cefb77c5d67aa
https://music.taihe.com/v1/song/tracklink?
但山重水复疑无路,柳暗花明又一村。我发现了藏这个链接的json文件
网页里显示的网址是这样的:
https:\/\/audio04.dmhmusic.com\/71_53_T10046201598_128_4_1_0_sdkcpm\/cn\/0208\/M00\/69\/E6\/ChR461srcVuAZpnhAEWuio_A6IM676.mp3xcode=ea685308964753307c3bfb02176044dacea3c6f
这里需要进行一些处理,将这些内容转换为网址
js=json.loads(list)
对比这个json文件的链接,我找到了方向
https://music.taihe.com/v1/song/tracklink?sign=d871af09065141ff9907a1afbe41a806&appid=16073360&TSID=T10046201598×tamp=1613465041
https://music.taihe.com/v1/song/tracklink?sign=724a9f852e9206d8d9a38083d768c7d4&appid=16073360&TSID=T10046201621×tamp=1613465327
https://music.taihe.com/v1/song/tracklink?sign=d871af09065141ff9907a1afbe41a806&appid=16073360&TSID=T10046201598×tamp=1613465041
https://music.taihe.com/v1/song/tracklink?sign=405aab8aa4e7c1118bfbd55525d398e6&appid=16073360&TSID=T10046201595×tamp=1613465009
https://music.taihe.com/v1/song/tracklink?sign=66b830db419a03149ddd618fa2c6d89d&appid=16073360&TSID=T10045984799×tamp=1613464973
通过上面的对比,我发现这些链接只有sign,timestamp,TSID是不同的,我又试了几次,发现sign和timestamp是干扰设置,随便找一个就能用,那么就只剩TSID这一个变量了。
然后就好说了,只需要批量获取TSID就可以了。
刚开始我发现同一个歌手的歌TSID编号是连着的,但是有些编号是没有歌的,而且只通过循环无法保证下载的歌我都喜欢,所以我放弃了这个方法,但当我打开歌手页面的源代码时,瞅瞅我发现了啥:
陈奕迅在千千音乐上所有音乐的TSID都在这里。
歌手页面的网址也非常简单
https://music.taihe.com/artist/A10047719
https://music.taihe.com/artist/A10047646
https://music.taihe.com/artist/A10140865
最终我将代码设计为手动输入歌手ID,然后爬取此歌手所有音乐
并调用os模块,创建以歌手名为文件名的文件,将所有爬取到的音乐保存在里面。
最后是完整代码