爬取网易云音乐“三部曲”(二):获取网易云音乐歌手歌词!
上一篇文章爬取了歌手的姓名和歌手的 id ,这篇文章根据上篇爬取的歌手 id 来直接下载对应歌手的歌词。这些我其实可以写成一个大项目,把这个大项目拆成小项目一来方便大家的理解,二来小项目都会了的话,拼在一起就是一个完整的项目了。
上篇文章没学会的也不要紧,私信小编可以获取上次的爬取结果 csv 文件,文件里有歌手名字和歌手 id。
好了,先看看爬取歌词的结果,我本来打算输入的是张学友的id:6460,只是手不自觉的输入了美女张韶涵的 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,运行此文的代码,就能下载歌词了。以后去看演唱会,再也不用愁因忘记歌词而不能和歌手一起嗨歌了。好了,爬完美女的该把正事干完了,赶紧把歌神的歌爬一下,免得又被说假粉丝了。
以上就是本文的内容,未完待续。。。
本文来自网络,如有侵权,请联系小编删除!