前几天小编给大家分享了数据可视化分析, 在文尾提及了网易云音乐歌词爬取, 今天小编给大家分享网易云音乐歌词爬取方法.
本文的总体思路如下:
找到正确的 URL, 获取源码;
利用 bs4 解析源码, 获取歌曲名和歌曲 ID;
调用网易云歌曲 API, 获取歌词;
将歌词写入文件, 并存入本地.
本文的目的是获取网易云音乐的歌词, 并将歌词存入到本地文件. 整体的效果图如下所示:
基于 Python 网易云音乐歌词爬取
赵雷的歌曲
本文以民谣歌神赵雷为数据采集对象, 专门采集他的歌曲歌词, 其他歌手的歌词采集方式可以类推, 下图展示的是成都歌词.
基于 Python 网易云音乐歌词爬取
赵雷歌曲 ---成都
一般来说, 网页上显示的 URL 就可以写在程序中, 运行程序之后就可以采集到我们想要的网页源码. But 在网易云音乐网站中, 这条路行不通, 因为网页中的 URL 是个假 URL, 真实的 URL 中是没有 #号的. 废话不多说, 直接上代码.
基于 Python 网易云音乐歌词爬取
获取网页源码
本文利用 requests,bs4,json 和 re 模块来采集网易云音乐歌词, 记得在程序中添加 headers 和反盗链 referer 以模拟浏览器, 防止被网站拒绝访问. 这里的 get_html 方法专门用于获取源码, 通常我们也要做异常处理, 未雨绸缪.
获取到网页源码之后, 分析源码, 发现歌曲的名字和 ID 藏的很深, 纵里寻她千百度, 发现她在源码的 294 行, 藏在 < ul class="f-hide"> 标签下, 如下图所示:
基于 Python 网易云音乐歌词爬取
歌曲名和 ID 存在的位置
接下来我们利用美丽的汤来获取目标信息, 直接上代码, 如下图:
基于 Python 网易云音乐歌词爬取
获取歌曲名和 ID
此处要注意获取 ID 的时候需要对 link 进行切片处理, 得到的数字便是歌曲的 ID; 另外, 歌曲名是通过 get_text() 方法获取到的, 最后利用 zip 函数将歌曲名和 ID 一一对应并进行返回.
得到 ID 之后便可以进入到内页获取歌词了, 但是 URL 还是不给力, 如下图:
基于 Python 网易云音乐歌词爬取
歌词的 URL
虽然我们可以明白的看到网页上的白纸黑字呈现的歌词信息, 但是我们在该 URL 下却无法获取到歌词信息. 小编通过抓包, 找到了歌词的 URL, 发现其是 POST 请求还有一大堆看不懂的 data, 总之这个 URL 是不能为我们效力. 那该点解呢?
莫慌, 小编找到了网易云音乐的 API, 只要把歌曲的 ID 放在 API 链接上便可以获取到歌词了, 代码如下:
基于 Python 网易云音乐歌词爬取
调用网易云 API 并解析歌词
在 API 中歌词信息是以 json 格式加载的, 所以需要利用 json 将其进行序列化解析出来, 并配合正则表达式进行清洗歌词, 如果不用正则表达式进行清洗的话, 得到原始的数据如下所示 (此处以赵雷的歌曲成都为例):
基于 Python 网易云音乐歌词爬取
原始数据
很明显歌词前面有歌词呈现的时间, 对于我们来说其属于杂质信息, 因此需要利用正则表达式进行匹配. 诚然, 正则表达式并不是唯一的方法, 小伙伴们也可以采取切片的方式或者其他方法进行数据清洗, 在此就不赘述了.
得到歌词之后便将其写入到文件中去, 并存入到本地文件中, 代码如下:
基于 Python 网易云音乐歌词爬取
写入文件和程序主体部分
现在只要我们运行程序, 输入歌手的 ID 之后, 程序将自动把该歌手的所唱歌曲的歌词抓取下来, 并存到本地中. 如本例中赵雷的 ID 是 6731, 输入数字 6731 之后, 赵雷的歌词将会被抓取到, 如下图所示:
基于 Python 网易云音乐歌词爬取
程序运行结果
之后我们就可以在脚本程序的同一目录下找到生成的歌词文本, 歌词就被顺利的爬取下来了.
相信大家对网易云歌词爬取已经有了一定的认识了, 不过 easier said than down, 小编建议大家动手亲自敲一下代码, 在实践中你会学的更快, 学的更多的.
这篇文章教会大家如何采集网易云歌词, 那网易云歌曲如何采集呢? 且听小编下回分解~~~
来源: http://www.bubuko.com/infodetail-2578238.html