Python 爬虫获取网易云音乐歌手歌词

2,401 阅读4分钟

此文首发于公众号「Python知识圈」,欢迎直接去公众号看

“ 阅读文本大概需要 3.1 分钟

上一篇文章爬取了歌手的姓名和歌手的 id ,这篇文章根据上篇爬取的歌手 id 来直接下载对应歌手的歌词。这些我其实可以写成一个大项目,把这个大项目拆成小项目一来方便大家的理解,二来小项目都会了的话,拼在一起就是一个完整的项目了。

上篇文章没学会的也不要紧,公众号回复「歌手」可以获取上次的爬取结果 csv 文件,文件里有歌手名字和歌手 id。

好了,先看看爬取歌词的结果,我输入的是张韶涵的 id:10562,爬取了热门歌曲 50 首的歌词。

项目环境

语言:Python
工具:Pycharm

导包

requests:根据 url 获取页面源码。
BeautifulSoup:解析提取源码。

程序结构:


程序由六部分组成:
get_html():提取页面源码
get_top50():提取歌手的歌曲信息。
get_lyrics():提取歌曲的歌词。
save2txt():把歌词保存为 txt 文件。
main:主函数。

解析页面

这个是爬虫第一步了,注意下代理 ip 的设置,防止自己的 ip 被封,如果爬虫数据量大的话,建议在主函数中加入等待时间,这样也不会给爬取目标的服务器增加压力,就会减少被封的风险了。

这个函数的作用是返回热门歌曲页面的源码文件,之前也写过一篇文章,不过用的是 selenium 库,selenium 库爬取比较慢,这次换一种思路,用requests 库请求。 url 是根据上篇文章获取的 id 拼接起来的,但是页面这个 url 是个假的 url ,用假的 url 提取不了页面源码。后来查了下网易云音乐的 api,发现真实的 url 没有 #,去掉这个多余的 # 加上对应歌手 id 即可,这个 url 我放在主函数了。

获取歌手的歌曲信息

通过 get_html(url) 函数提取的源码提取出包含歌曲名称和歌曲 id,这个选择器标签藏得很深,我是把 soup 先打印出来,找出第一首歌的位置,往前查找标签,分析出选择器为 .f-hide #song-list-pre-cache a,再对提取的元素进行处理,去除不需要的信息,保留有效信息并以 zip 形式一一对应返回。

获取歌词

通过上个函数获取的歌曲 id 获取对应的歌词,这个地方如果直接用页面上的 url 也获取不到内容,也只能通过他们提供的 api 链接拼接上歌曲 id 即可。解析后用 json.loads() 解码 python json 格式,提取歌词信息,然后用 re.sub() 来实现字符串替换处理的功能,处理掉前面我们不需要的元素。

保存数据

直接用歌名作为名称保存为纯文本文件,如果要保存在特定目录,需要自己提前新建好此目录。

执行 main 函数

最后执行 main 函数,输入需要爬取歌手 id,运行,每获取一首歌歌词时我设置了一个等待时间,这也是为了防止 ip 被封的一种小策略。

好了,以后想看哪位歌手的热门歌曲的歌词的话找到 TA 的 id,运行此文的代码,就能下载歌词了。以后去看演唱会,再也不用愁因忘记歌词而不能和歌手一起嗨歌了。

公众号回复「歌词」获取源码。

只有歌词怎么行,下篇文章教大家怎么下载音乐。

此文章对你有点帮忙的话希望大家能多给点支持,该关注关注,该点赞点赞,该转发转发,有什么问题欢迎在后台联系我,也可以在后台加入技术交流群,群里有大神,可以一起交流学习。

推荐阅读

这篇文章带你轻松入门 python 爬虫

Python 爬虫获取网易云音乐歌手信息

让代码和迈克杰克逊一起跳舞



公众号「Python知识圈」

长按二维码关注我们

本公众号专注:

1.python 技术分享

2.python 爬虫分享

3.资料、工具共享

欢迎关注我们,一起成长!