音乐情感分析大创(2):爬虫获取数据集

在确定下来选用MusicXML格式的乐谱作为研究对象以后,我们就要构建一个合适的数据集了。

The Choral Public Domain Library (CPDL)

The Choral Public Domain Library (CPDL)创立于1998年,是世界上最大的公共版权电子乐谱库之一,截至本文写作时已收录来自至少3623位作曲家的36481首声乐作品乐谱,其中部分乐谱提供多种格式的下载(MIDI、PDF、MusicXML、Sibelius等)。
CPDL中的英文歌曲共有9664首(截至2020.10),粗略估计了一下大致有一半提供了MusicXML格式。
CPDL Eng
点击任何一首歌曲的链接,会跳转到二级详情页面。
在这里插入图片描述
我们需要关注的主要是上图中红字标注的内容:
首行的标题也就是歌曲名称,括号里为作者。
Music files中列出了该首歌曲有哪些格式提供下载。上图圈出的绿色图标表示这首歌提供了MusicXML格式乐谱。
下方的General Information列出了歌曲的详细信息(标题、词曲作者、主奏乐器等等)。其中体裁(Genre)分为非宗教(Secular)宗教(Sacred)。我们发现,大多数宗教歌曲的情感表达比较单一,所以在后续的处理中,我们会利用这一标签过滤掉宗教歌曲。

爬取MusicXML乐谱

因为是初次接触爬虫,没有选用Python直接编程,而是用了可视化工具GooSeeker。(偷懒)
CPDL的乐谱库是比较规整的二级页面形式,所以我们要设置两级爬虫,第一级爬虫爬取所有歌曲的二级页面链接,第二级爬虫进入链接并爬取歌曲详情页面的MusicXML文件、标题和体裁等信息。

第一级爬虫:获取歌曲二级页面链接

一级爬虫相对简单,根据GooSeeker的官方教程,新建了名为“CPDL”的爬取规则,抓取两项内容:Link(二级页面链接)和SongTitle(歌曲标题)。根据页面底部的“下一页”标记来实现自动翻页连续抓取。

第二级爬虫:抓取歌曲详情、下载MusicXML乐谱

一级爬虫获取了所有二级页面Link,我们将其作为线索定义规则“CPDL2”,如果歌曲有MusicXML的话就下载,并爬取其Title和Genre信息。
在这里插入图片描述

XPath定位所需元素

调试二级爬虫的过程中,遇到了一些问题。除了Title可以根据页面元素的相对位置进行定位之外,Genre和MusicXML出现的位置都不固定,经常出现爬取失败的情况。可视化方法受到局限了,这时需要结合XPath来构建爬虫规则。
XPath即为XML路径语言(XML Path Language),它是一种用来确定XML文档中某部分位置的语言。(XPath_百度百科
看完了一个B站的教学视频,对XPath有了初步的了解。我们到CPDL的歌曲详情页面试试看。
在这里插入图片描述
进入元素检查界面(我使用的Firefox),可以发现绿色的MusicXML图标指向的图片路径为

http://www.cpdl.org/wiki/images/5/58/MusicXML.png

我们要的是这个图标对应的链接所指向的MusicXML文件,XPath语句为

//a/img[@src='http://www2.cpdl.org/wiki/images/5/58/MusicXML.png']/../@href

在GooSeeker中修改规则:

同样地,用XPath语句定位Title和Genre。

//h1/text()  ----Title可以直接用位置定位
//b[text()='Genre:']/following-sibling::a[1]/text()  ----寻找“Genre:”文本的兄弟结点文本

规则定义完成后,开启DS打数机进行爬取。可在管理后台调度爬虫群实现多线程爬取,加快速度。

初步的数据清洗

筛选非空结果

爬虫得到的所有数据都存放在独立的文件夹中,可以看到一共爬取到5675组数据。

用Excel查看输出结果,发现有不少数据其实是空文件夹。
在这里插入图片描述
用筛选功能保留非空的Secular歌曲。
在这里插入图片描述

文件批量重命名

此外我们发现,得到的MusicXML乐谱的命名是不规范的,我们需要按照歌曲的标题进行重命名。这里参考的是GooSeeker官方的批量重命名教程,利用Excel的自动填充写批处理。
最后在Windows资源管理器中搜索".mxl",将文件copy到新文件夹中。

最终得到的有效数据量是1214,虽然不算很多但也基本够用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值