前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入

接触python也有一段时间了,一提到python,可能大部分pythoner都会想到爬虫,没错,今天我们的话题就是爬虫!作为一个小学生,关于爬虫其实本人也只是略懂,怀着”Done is better than perfect”的态度硬着头皮开始了这篇文章的撰写!好了,废话不多说!

先说一下今天我们的目的,作为一个音痴但不影响我对于音乐的执着,所以今天我们爬取的是网易云音乐,我们将会通过代码爬取歌词并写入到本地。

作为新手,我很本能就打开页面复制了url,然后用Beautifulsoup解析了网页并打印出来,然后去查找歌词所在的标签,心想这不是so easy吗!写下了以下代码

 

卧擦嘞,打印出来了一些什么鬼啊!居然没有找到歌词!怎么办!怎么办!沉思了良久后我觉得我掉进了一个巨坑,事情绝对没有那么简单!.....(心情无比悲痛,此处省略一万字)作为平常屡试不爽的招数今天居然装逼失败!痛定思痛,我觉得肯定是URL的问题,经过一番思索发现原来我找了一个假的URL!几经波折,找到了这样一个URL

'http://music.163.com/api/song/lyric?' + 'id=' + str(191232) + '&lv=1&kv=1&tv=-1'

打印出来的效果是这样的:

这才像那么回事了,但是发现里面还多了一些不需要的东西。

第二步,筛选出我们需要的元素,这里我们将用到正则表达式和json,切记用之前先导入这两个模块。加入几行代码,帅选后的结果为:

到这里我们已经基本上完成了我们的工作。最后一步,写入文本就不多说了,这样我们再加上几行代码就搞定了!这里我们先贴上之前的代码

由于本人对歌神的崇拜犹如滔滔江水之连绵不绝,几乎他的每一首歌都很喜欢,所以我想多下几首歌的歌词,热心的吃瓜群众可能会这样提醒我换一首歌,把URL复制进去替换一下不就OK了吗,但是作为一个连吃饭都舍不得下床的极度懒惰者我怎么可能会做这样繁琐的事呢!诶换了一首歌也只是歌曲的ID发生了变化。找到规律了!我们可以定义一个这样的函数根据歌曲的ID去自动下载歌曲的歌词,我们想要下载哪首歌曲的歌词需要输入歌曲的ID就可以了!我们可以看到张学友的主页有50首最热门的单曲,我们姑且就先定一个小目标,下他个50首歌!根据我们刚刚的思路我们只需要从这个页面筛选出这50首歌曲的ID就可以了!这时候我们又遇到了和刚刚一样的问题,print一个居然找不到我们需要的元素。历经千辛万苦终于get到了一个争气的URL,

'http://music.163.com/artist?id=' + str(6460)

同样,经过一番筛我们找到了自己需要的东西,那就是一大串的music_id!说了这么多上代码

再来一张效果图

 有了这些我们就可以根据一个歌手的ID爬取这个歌手的50首热门歌曲的歌词,定义一个函数即可,这里就不贴代码了。就这样我成功的爬取了歌神的50首热门歌曲的所有歌词!讲到这里可能有的朋友说自己的偶像不是学友哥啊,我想爬取其他歌手的歌词,比如说我们的华仔啊,周董啊,天后王菲啊.....于是我就又折腾了一下,找到这样一个页面“华语乐坛歌手历史地位排行top50”(注:歌手排列顺序为网上搬运,不代表单主看法,排行榜出处网址: http://m.icaijing.com)索性我就我把这五十个歌手的50首热门歌曲都爬取下来吧!不料又出了一个问题!下载到某位歌手的一首歌时报错了!

思考了一会,觉得代码没有问题啊!于是做了一个标记,可以让我看到是下载到哪个歌手的哪个歌手的哪一首歌时出了错误,机智的我终于找到了问题所在,原来是该歌曲没有提供歌词!于是又添了几行代码引入了异常机制!终于完美了!下面附上源代码及效果图

效果图


本文转载:CSDN博客