前言众所周知,网易云音乐是有一个外链音乐播放器的,但是很丑不能满足自定义样式的需求但是要自己写音乐播放器,首当其冲的就是要拿到音乐的外链
步骤从网页端入手进入网易云网页端,随便找一首歌,打开开发者工具,选择网络监视器,过滤到媒体,然后开始播放得到音乐的链接,例如
https://m10.music.126.net/20220817212854/fedae95b089bd54b2d268799c6d77509/ymusic/obj/w5zDlMODwrDDiGjCn8Ky/17242547712/c2e5/5632/bf80/e46176bd31a234f765838a94227e228f.mp3一看到URL开头有日期就知道它不久就会过期,很显然得到的不是永久链接
百度当你觉得烦心的时候,就上搜索引擎去搜搜吧幸运的是,已经有人探过这条路了网易云音乐歌曲的永久链接为
https://music.163.com/song/media/outer/url?id=${id}.mp3将其中${id}替换为歌曲网址里面的id,例如,某首歌曲的网址为
https://music.163.com/#/song?id=1403528956则其外链为
https://music.163.com/song/media/outer/url?id=1403528956.mp3访问该外链后会跳转到类似上一步的链接然而,电台节目的外链并不符合此规律
审查元素随便找一首电台曲目,审查元素发现
...
...
批量处理一个电台的曲目太多了,总不能每个都这么处理吧想要批量处理,可以自己写爬虫还有一个方法是RSS(其实一开始就看RSSHub就没那么麻烦了)在RSSHub中有网易云音乐电台的接口,例如
https://rsshub.app/ncm/djradio/347317067数字部分即为电台的idRSS实际上是一个xml文档,但里面东西太多了,只需要id和歌名就行写了个python来处理
from xml.etree import ElementTree as ET
import json
tree = ET.parse('./bgm.xml')
root = tree.getroot()
list = []
for i in root[0].findall('item'):
name = i.find('title').text
id = i.find('description').text.split('id=')[1].split('.mp3')[0]
list.append([int(id), name])
with open('./bgm.json', 'w') as f:
json.dump(list, f)引用获取网易云音乐外链地址RSSHub