爬取⽹易云⾳乐某⼀个⼈的评论
需求来源
上周六的时候和⼀朋友聊天,聊到⽹易云系列产品,不知不觉就说到了⽹易云⾳乐,我说了些产品细节的问题,⽐如说,为什么在我不开通会员的情况下,⽹易云⾳乐不允许我红⼼⼀个会员歌曲没有购买 没有听歌的权利这是正常,但连点击喜欢的权利都没有却让我很是郁闷,在后⾯,我为此功能特意下载虾⽶⾳乐,发现虾⽶却是可以红⼼收费歌曲的,他⼀脸吃⽠相的看着我说,这种细节功能你都计较啊,然后说出了他⾃⼰对⽹易云⾳乐的不满,说到了为什么⽹易云⾳乐不能看⾃⼰或他⼈的个⼈评论,我看着他说,这功能哪有⼈⽤啊,再说,我要是真的想知道,我可以将这个⼈的评论爬出来的。这句话说完我就知道要出事情了,果不其然,我那朋友⾮要我帮他爬取下⾃⼰的个⼈评论,可是那⼀刻我在⼼⾥想,我怎么知道他评论了哪些歌呢?
然后在回去的路上,我⼀直在想这件事情,可以通过爬取这个⼈听过的歌的所有评论,然后到这个⼈的评论,然后⼀直就陷⼊了⼀个死循环,我怎么获取这个⼈听过的歌曲呢,似乎是没有办法的。
思路转换
没有办法了,于是换了个思路去思考这个问题,为什么会评论⼀⾸歌曲呢,如果是我,我会怎么做,想
了很久,我想只有⾃⼰⽐较喜欢的歌曲才会去评论的,于是想何不把这个⼈的喜欢的所有歌曲中的评论爬下来呢,索性扩⼤了范围,将这个⼈的所有个⼈歌单的歌曲的评论爬下来,然后将属于这个⼈的评论保存下来。
具体实践
寒山上的石观音张国荣 莫妮卡接⼝分析
思路想好了,就去做,⾸先肯定是分析接⼝,结果却发现接⼝发⽣了变化,之前的接⼝是不进⾏加密的,现在的接⼝每次的请求都带上了encSecKey 和 params 参数,显然是加密了,于是在 Github 上发现了这个,,是 Python 实现的,重要的部分是 aesEncrypt 和rsaEncrypt 两个加密的部分,完成这部分之后呢,后续⼯作就简单的多了。
实践⽅案
姚笛堕胎考虑到⽤户歌单歌曲数量⽐较多的情况,在爬取歌曲评论的过程中,开启多进程爬取是必要的,但⼜考虑到机器性能的原因,队列执⾏爬取功能也是必须的,不然机器可能在进程爆满的情况效率各⽅⾯实在是堪忧啊。
我们有武功歌词为了考虑以后其它新功能的开发,在此采⽤了 Laravel5.4 + PHP7.1 环境下的开发,需要安装php扩展,
⼀⽅⾯是 Laravel 开发的效率,另⼀⽅⾯ Laravel 在我提到的⼏个问题上⾯都有相应的解决⽅案,数据的爬取则是采⽤了 Laravel 的 artisan 命令⾏,对于多进程则是采⽤了进程控制扩展 PCNTL,但同时这个多进程爬取的过程则是放到了 redis 驱动下的中,同时使⽤了 Supervisor 进⾏队列的监控,整个代码我已经开放到 。
北川景子山下智久clone 下来后配置完成后执⾏:
php artisan netease:playlist 123456
变形金刚女主角名字将123456替换成⽹易云⾳乐⽤户的 id,等待结束后,表 user_comments 就能看到⽤户的评论了。
具体操作可以查看 README.md 感兴趣的同学可以试着玩⼀玩,如果不是开发⼈员,可以私信我来爬取后再发给你,后续我会开发出线上的功能供⼤家使⽤。
这⾥我只是提供了个思路,有需要请⾃⾏爬取,有问题可以联系我。(w1113241948)