前言
在某天下午, 我愉快的刷着云村哈哈, 很欢乐, 无意看到我所关注的一位 音乐人 说要下架他(她)所创作的所有电台, 我想着会不会以后动态里的视频也要删除呢? 刚好很久没有写过爬虫的代码了, 于是就有了这样的事儿.
简单分析
因为是要将视频爬取下来, 而且粗略估计一个视频的时长大概5分钟不到, 网易云应该不会对视频进行分段, 所以最终的目标就是获取视频的链接.
按照一些爬虫教程所说, 思路大概可以这么概括: 观察网页的元素, 获取视频关键的id等信息, 分析网络请求(get或post一些什么信息), 对返回的信息进行一些存储的操作. 然而, 网易云音乐的网站基本是用<iframe>这个标签构建的, 简单的爬虫对其并不友好, 那么我们用selenium+phantomjs来解决这个问题就好了.
以 个人动态页面 为例, 通过对其的分析, 可以看出html标签中的自定义属性data-vid存放了视频的id, 如下图
在新的页面打开 视频, 可以看到地址栏的地址应为
http://music.163.com/#/video?id=5B0AF067CBB42F7789F7B97E13827565
通过播放视频, 分析网络请求, 可以看出这个视频是通过网易云自己的api来获取
这个 playurl?crsf_token= 看起来和我需要的东西有关系, 仔细瞧一瞧, 可以发现Request URL为 http://music.163.com/weapi/cloudvideo/playurl?csrf_token=
再来看看参数什么的
从上图的红框和Request URL可以推测这个是网易云的api
再来看看Response
上图的红框中的url就是视频的url, 而且还是超清(shd).
小结
最终思路是这样的:
- 用selenium+phantomjs在个人动态页面上获取所有的视频id(data-vid)
- 使用api去获取视频链接
- 保存链接等