正文
网易其实对歌单进行了分页操作,也就是说我们在爬取每个分类的时候还要知道在这个分类中的歌单共有多少页,所以接下来要去解析 每一类对应有多少页的歌单 (为了缩小爬取量只用了每个风格5页歌单,每一页包含35个歌单)
解析页数
我们就需要去遍历这一页的每一个歌单,并且拿到 歌单相应信息。我们需要的信息有 【歌单风格,歌单名字,歌单收藏量】分别为 【style,name,counts】
遍历一页中的每一个歌单
获得歌单信息及包含的歌曲列表,并携带这些信息继续去解析歌曲列表中包含的歌曲
我们现在需要找到每首歌曲中所包含的信息,我们所需要的有【歌曲名字,歌曲歌手,歌词】其中前两个都好办,只有最后一个歌词,是没有办法直接获取到的,因为歌词是动态加载出来的,为了解决这个问题,我们引入[ selenium + phantomJS ] 来模拟浏览器行为,之所以选择phantom是因为他是无界面的浏览器无需渲染,速度更快一些。
首先在初始化的部分,将PhantomJS的设置初始化。添加headers和timeout。
然后在解析每个music的时候,使用PhantomJS来加载歌词界面,并获得到歌词。(由于获得歌词中包含
等这样的Html元素标签,所以通过正则手段去掉)最终将获得到的全部信息通过Pipeline输出到文件。
这样我们数据提取的过程就结束了,我们得到了一个.csv格式的文件输出,其中每一行就是一首歌及该歌曲的相应信息。部分截图如下:
.csv输出文件部分截图
最后我们就可以用这些数据去进行一些可视化绘图,比如不同风格中最受欢迎的歌手,以及每个风格中的Top10歌曲,不同风格中歌单的平均长。
可视化部分
因为提取到数据还是相对完善,并没有出现复杂的数据清洗需求。因此只是简单的对数据做了一次去掉Nan空值的操作。因为我们做风格分类,所以我们考虑使用每一首歌曲的歌词作为特征,因此我们将爬取到的信息中的歌词和风格单提出来,其中歌词作为特征,风格作为标签。基于此构建一个牛逼的分类器,实现我们的风格分类。
通过一些复杂的正则和替换操作,拿到最终的训练数据,格式如下:
训练数据
接下来呢,我们搞个有意思的东西【词云】 我们使用WordCloud 和 jieba 来实现这个小功能。效果图如下:
古风类
英伦类
是不是还足够炫酷的样子!小插曲而已,那么接下来干点正事。我们要去构建模型了