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