引子:记得高中的时候,一位同桌是五月天的超级粉丝,一下课就大声哼唱(丝毫不在意旁边人的感受,哈哈),刚开始还挺烦的(我下课要赶紧补觉),后来也就慢慢的习惯了,以至于五月天的歌曲成为了记忆中青涩而又躁动的青春的触发器。刚好最近在学习Python3网络爬虫,如是想把网易云音乐上面的关于五月天的歌曲及歌词给下载下来,下面将详细的介绍操作过程。
1. 总体思路分析
在行动之前,首先想象一下我们要将目标歌曲及歌词下载下来,需要经过哪些步骤?
爬虫思路按照上面的大体思路,我们可以自定义函数模拟爬取过程。
2. 具体爬取步骤
2.1 获取网页
导入包 获取网页我们使用的是requests库来获取网页,其中请求头head中的参数信息可以从网站上粘贴过来:
请求头信息可以看到这里面的请求头参数中并没有 ‘Host’ 的参数信息,因此在上面的自定义函数中可以不用这个参数。
2.2 网页解析
接下来我们就可以用beautifulsoup来解析网页了:
网页解析上面函数中find中要查找的内容需要我们肉眼从网站源代码中搜寻:
网易云音乐用户界面 网页源码从上面的观察中我们可以发现,我们需要获取的歌曲信息都在源码属性 class='f-hide'的<ul>标签中,而后面的 herf='/song?id=55331024' 中的 id 信息则是每一首曲子的地址。根据这些信息再去理解我们上面写的函数就比较清晰了。
2.3 信息提取
按照上面的写法,获取的信息里面还有很多我们不想要的杂质,因此为了获取更纯净的歌词信息,我们找到了网易云音乐的API,只要把歌曲的ID放在API链接上便可以获取歌词了。在API中歌词信息是以json格式加载的,所以需要利用json将其进行序列化解析出来,并配合正则表达式进行清洗歌词。具体代码如下:
歌词提取这样的话我们就能获取每一首音乐的歌词了。
2.4 歌词存储
接下来我们将刚刚提取的歌曲歌词存储在指定的文件夹中:
存储歌词这一步比较简单,需要强调的是文件的写入格式,‘a’表示的是以追加方式打开一个文件。如果该文件已存在,文件指针将会放在文件结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,则创建新文件来写入。
2.5 下载并存储歌曲
除了下载歌词外,我们还有一个任务就是要将曲子给下载下来:
下载并保存歌曲这里面我们用到的是 urllib.request 版块中的urlretrieve函数,该函数的作用是将远程数据下载到本地。
2.6 主函数
以上,我们将主要的函数都完成了,接下来的工作便是将这些函数进行组合已达到我们爬取的目的。
主函数在主函数中,我们用到了异常处理机制,因为我们在爬取的过程中发现有些歌曲的命名方式的问题导致存储失败,从而造成程序出现bug,这里截取的 FileNotFoundError 异常就是主要避免这种问题。
2.7 运行结果
运行以上所有的函数,如果正常的话将会出现如下的结果:
运行的结果其中我们需要输入歌手的 ID,这个可以在网易云音乐上查找出来。
然后,我们可以在本地的文件中找到两个文件夹 "lyrics1"和"songs1",其中前者存放的是歌词,后者存放的是曲子。我们分别打开看看:
爬取的歌词 爬取的歌曲接下来,我们可以好好的享受一下我们的劳动成果了。
结语:越来越觉得通过这种输出方式来学习是一种非常有效的方法,然后最重要的是能体会到快乐。希望本文能够帮助到需要的人...
网友评论