Python 爬取音乐资源

发布于 2019-02-17  152 次阅读


今天想起自己之前一直想做自己的音乐播放器APP,用来替代现在臃肿的网易云音乐。一方面自己做不会有广告和很多没必要的功能,另一方面现在的网易云音乐很多歌版权没有,下载太多音乐APP也不方便。

面临的问题

其实最大的问题就是音乐资源的问题,自己建音乐库是基本不可能的。只能通过爬取音乐网站获得最重要的音乐资源链接(我一直觉得这种链接应该是动态的,这样就不是很好处理)。今天发现现在的音乐站点URL越来越优雅了,其实就是急速低音质的资源基本是可以很容易被获取到的(无损音质暂时就不考虑了)。这大概也解释了wordpress会有Hermit播放器这种东西,毕竟各家的音乐资源容易获得,套个外壳就可以做成精美的播放器了。

网易云音乐资源的爬取

说起爬虫Python肯定首选了,毕竟简单方便。下面的代码直接从CSDN的博客上粘贴来。Beautiful Soup 解析Html真是做到保姆式的服务。

#encoding=utf8
import requests
from bs4 import BeautifulSoup
import urllib.request
headers = {
    'Referer':'http://music.163.com/',
    'Host':'music.163.com',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.75 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
    }
#play_url = 'http://music.163.com/playlist?id=317113395'
play_url = 'http://music.163.com/playlist?id=2182968685'
 
s = requests.session()
response=s.get(play_url,headers = headers).content
s = BeautifulSoup(response,'lxml')
main = s.find('ul',{'class':'f-hide'})
 
for music in main.find_all('a'):
    print('{} : {}'.format(music.text, music['href']))

基本就是从一个歌单id,可以拿到所有音乐的id。

音乐资源url就是http://music.163.com/song/media/outer/url?id=歌曲id.mp3。

运行结果

这个过程真是简单的爆炸,这里从歌单提取可以实现,做复杂一点就可以从搜索结果中提取。除了音质差,其他可以说很完美。

放在我的播放器里测试一下,没什么问题(丑了点,以后再改,新的Flag ╮(╯▽╰)╭)。网易云音乐资源爬取成功,估计百度、虾米、酷狗之类的音乐也不会很费劲,QQ音乐这只铁公鸡除外。

测试

App UI设计

刚好在微博上看到,都好棒啊!

整体设计

  • 选择了Python爬取音乐资源,那服务器使用Python的框架开发必然方便。正巧大佬前些天提到了Django框架。Django作为一个MVC设计思想的框架经过年前试用,已经部署到我的服务器,确实很不错。服务器响应手机App的请求,webSocket实现可以使用Django的 dwebsocket或者 channels。
  • 手机App仍然使用我熟悉的ActionScript来完成,工具还是Animate cc。虽然flash没落了,但 ActionScript 仍然是我最喜欢的语言。