我用Python爬取网易云音乐上的Hip-hop歌单,分析rapper如何押韵
缘起
《中国有嘻哈》这个节目在这个夏天吸引了无数的目光,也让嘻哈走进了大众的视野。作为我今年看的唯一一个综艺节目,它对我的影响也蛮大。这个夏天,我基本都在杭州度过,在上下班的taxi上,我几乎都在刷这个节目,最后可以说是看了好几遍。同时,也了解了flow、punchline、diss、酷炫的双押、三押等等专业词汇。
这其中,我尤其对押韵感兴趣。我在想,如果,我把嘻哈歌手唱的所有押韵的词汇都拿下来,然后只要给一个关键词,就能随时随地来一段儿押韵的FreeStyle,是不是很炫酷~
大概思路
整体的思路很清晰,就是
歌单 -> 歌曲(歌词) -> 分词词库、拼音 -> 韵脚 -> 随时随地的FreeStyle
网易云音乐网站爬取数据
首先进入网易云歌单页面,分类选择“说唱”:
可以看到网友们整理的说唱的歌单都在这里啦~对所有的歌单页面爬取,得到说唱歌单list,共1275张歌单:
进入其中一个歌单,有该歌单的歌曲页面:
对所有歌单的歌曲页面进行爬取,得到歌曲list, 共得到1W+首歌曲
取得每首歌曲的songId,调用歌词API (http://music.163.com/api/song/lyric?os=pc&id=509135896&lv=-1&kv=-1&tv=-1) 得到歌词:
当然,网易云还是做了一些反爬策略,刚开始测试的时候,我的真实IP就被拉黑了。返回大量503:
于是,找了一组代理IP,并且对爬虫进行了限速,绕过了反爬机制。
爬取过程gif:
这样大概过去了几个小时,1W+的歌词就都到手啦!
数据处理 (分词,拼音解析,获取双押、三押)
接着是将每首歌的歌词进行分词,使用开源的结巴分词进行并行分词,使用举例如下:
可以看到这句话的切分结果还是让人满意的。
结巴分词还可以对一段词分词后进行统计:
这样就可以对一篇文档进行分词及统计计数。于是我把每首歌都进行分词,把结果扔到了redis的zset结构中,出现次数记为score。完成之后,我基本就获取了整个嘻哈歌单的所有歌曲的全部词库。
接下来的问题是,如何将词库里的词转为拼音呢?开源的xpinyin解决了这个问题,使用举例如下:
xpinyin识别出了火锅底料对应的拼音组成。
那么韵脚又是什么东西呢?
拿 Jony-J的 《套路》举例, 迈步(mai-bu)、态度(tai-du)、外露(wai-lu)、带路(dai-lu), 其中的韵脚是 ai-u。
那么我该怎么获取词的韵脚呢?经过观察,我发现可以用 “aeiou” 作为字的分界, 取当前以及后面的部分为韵脚(这个其实比标准押韵要严格)
比如,火锅底料 -> huo-guo-di-liao -> uo-uo-i-iao
词云
用嘻哈音乐里的词去生成词云,可以直观的看到嘻哈歌手们歌里主要在唱些什么:
来段儿FreeStyle吧
前戏已经做足了,现在,我想要以”炒饭“为话题来一段儿FreeStyle(灵感来源于PGONE的炒面FreeStyle),于是我先搜了”炒饭“:
有很多双押的词,那我就用这些词来一段儿rap吧!
视频在此,前方核能!
https://v.qq.com/x/page/q05574kytoi.html
炒饭FreeStyle (PGONE风格,我最屌,你们都是傻逼)
beat: Rap God (Instrumental)
yo yo yo, whatsup.
This is MC YOUNG.
炒饭FreeStyle
LISTEN.
drop the beat DJ.
yo, yo, yo, yo, listen, listen, listen, check it.
Ready Ready Ready Ready Ready Ready Ready
不要听信那些谣言,
这只是对你的考验。
这场show我才是导演,
AKA你的老板。 ya ya
你若是再捣蛋,
年过三旬的老汉,
送你豪华的套餐,
滚回家去吃炒饭。
yeah 哥们儿的verse就是这么高产,
yeah 不像那些个盗版的hater让人讨厌,
也不好看,只会捣蛋,
还试图高攀那靠山, ya ya
攀不上了只会说好难,
到最后发现对面的我才最耀眼。 skr skr
诶, 你问我是哪个,
look at me,
老子一身正气浩然,
铜锣湾的陈浩南。 punchline
双押*19 达成 !
这段rap用 Final Cut Pro X 剪切视频,做的字幕。第一次做视频,大家见谅哈哈。
挖坑
挖个坑,下次写一个输入一个词,能实现以这个词为核心自动生成一段意思大致通顺的押韵的rap的功能。
欢迎关注我的微信公众号“芦阳以为”~
微信扫一扫
关注该公众号