python爬取酷狗Top500排行榜

写在前面

新的一周开始了,今天无意间听到一首比较好听的歌曲“学猫叫”,然后就开始了无限循环模式。本以为是新出的歌曲,故怀着激动的心情推荐给朋友,谁知朋友直接告诉我这首歌已经在酷狗top500排行榜高居榜首很久了。听到这个,不得不感慨,我是有多久没有了解酷狗的歌曲信息了。因此怀着好奇的心情去看了一下最新的酷狗top500排行,发现这首歌曲仍高居榜首,另外排行榜中也出现了很多我没有听说过的歌曲,真的打击到我了。对我这个喜欢听音乐的人来说,竟然对当下比较流行的一些歌曲竟然缺乏了基本认识。在这种耻辱心理的作用下,小编就想着统计一下最近的酷狗top500排行榜的歌曲信息,因此本期文章小编就和大家分享一下怎么使用python去爬取酷狗top500排行榜的歌曲信息,娱乐之余随时掌握点知识。下面正式开始。

准备工作

本期文章主要将爬取酷狗top500排行榜的歌曲信息,具体来说就是获取排行榜中各首歌的排名、歌曲名称、歌手以及播放时间方面的信息,大家先来看一下基本的情况:

酷狗音乐top500排行榜

可以看到“学猫叫”仍然处在榜首。而小编准备获取的就是图中红线圈起的部分。既然总体思路是爬取排行榜中的歌曲信息,那么基本的准备还是需要有的。对于网络爬虫的具体介绍不是本文的目的,大家可以参考相关的书籍。本文侧重在实践,会具体告诉你怎么使用python去爬取这些信息,所以关于爬虫原理以及网页构造将不会过多介绍,重点放在实现上面。下面简单地介绍一下爬虫原理及网页构造、以及爬虫需要的工具库。

爬虫原理

说到爬虫,它不过是人工浏览网页的自动化实现,因此爬虫必备两件事情:

模拟计算机对服务器发起Request请求;

接受服务器端的Response内容并解析、提取自己需要的信息。

因此任意一次爬虫,必须要做的都是发出请求获得网页,解析网页内容根据网页标签获得你所需要的信息。根据你需要浏览的网页的类型,爬虫不可避免地分为多页面爬虫和跨页面爬虫(常常浏览网页的你应该对此再熟悉不过,就不再多做解释)。多页面的爬虫基本流程为:

手动翻页并观察各网页的URL构成特点,构造出所有页面的URL并存入列表中;

根据URL列表依次循环取出各个URL;

定义爬虫函数;

循环调用爬虫函数,获得网页信息并存储数据;

循环完毕,结束爬虫。

而跨页面的爬虫流程表现为:

定义爬虫函数爬取列表页所有专题的URL;

将种子URL存放入列表之中;

定义爬取种子URL页面的爬虫函数;

爬取各个种子URL页面下的相关信息;

5.存放数据,结束循环。

所以可以看出相对于多页面爬虫,跨页面爬虫仅仅是需要多定义一个爬虫函数,两种爬虫流程的基本内容都是观察网页,定义爬虫函数而后爬取存储,所以了解一点网页知识是很有必要的。

网页构造

网页构造

右边显示的就是网页代码,你可能对此感到头痛,但是学习网络爬虫还是需要那么一点点的网页知识的,所以可以适当地了解一下html的基本知识,小编这里就不再多说。

工具库安装

小编这里使用的是python进行爬虫,虽然python中已经自带了一些网页获取与解析工具,但是相对于某些第三方库,自带的库效率较低。因此这里小编就着重介绍两种在网络爬虫中最常用的第三方库requests和BeautifulSoup。

Requests库的官方文档指出:让http服务人类。因此顾名思义,requests就是用来获取网页的;而BeautifulSoup库是用来解析网页的,通过这个库可以将网页代码格式化显示从而便于观察网页获取网页信息。两个库的安装,仅需要在命令行中输入以下代码即可。

不过如果你安装的是Anaconda的话,那么这两个库默认是已经安装好了的,所以小编这里再一次建议诸位安装Anaconda。好了,既然准备工作已经完成,那么下面正式开始爬虫实战。

爬取酷狗Top500实战

Top500排行榜所在的网页地址为,这是排行榜的第一页,共有24首歌曲信息,这样的页面应该有24页,第二页页面地址为,所以你应该已经观察出特点了,每页唯一的不同点就是前面的数字,这个数字就是页面页码,所以如果要依次获得各页面的网址,你应该可以通过下面这种方式便捷地获得。

这里小编以第一页的“学猫叫”这首歌的歌曲信息获取来说明爬取过程,第一页的网址已经知道,所以需要通过requests库获得网页内容。

requests获取网页内容

这就是requests获得网页内容的部分截图,现在知道为何要使用另外的解析库去解析网页内容了吧,这么混乱的网页构造估计能折腾死人,下面就使用BeautifulSoup来重新解析网页。

BeautiSoup解析网页

这就是BeautiSoup的魅力所在,网页内容一下子整洁格式化了,非常便于你去查找各个内容,既然已经正确地解析了网页,那么下面自然就是需要获得需要的内容了。

输出内容

代码中的第一行用来获取歌曲的排名信息,bsobj.select()函数中的参数为歌曲排名信息在网页中的相应存储位置,这个可以通过将鼠标移至排名的地方右键检查命令,然后在弹出的网页内容中通过右键的copy selector命令获取,不过切记将其中的nth-child改成nth-of-type;代码中的第二行以及第三行分别获取歌曲的标题以及播放时间;for循环用来获取其中的每一个所需要素,这里不再过多讲解,因为相关的命令在之前的文章中小编已经有所提及,所以这里不存在陌生命令。最后的print()函数将内容输出,可以从图中看出,我们已经正确地爬取了内容,那么下一步自然是需要将爬取的内容存放起来方便后续使用,这就需要用到小编在前期所讲到的xlwings库了,这个库可以连通python和Excel,极大方便python对Excel的定向输出。关于它的使用,请参看小编的前期文章,这里不再赘述。至此,大致已经了解了怎么去爬取网页中的相关内容,那么下面就要正式开始爬取排行榜的所有信息了。

综合示例

爬虫结果

后记

本文讲到这里就暂告一段落了,本期文章和大家聊了使用python去爬取酷狗Top500排行榜的歌曲信息,了解了在python爬虫中最为常用的requests库和BeautifulSoup库的相关使用方法。本文的爬虫属于典型的多页面爬虫,这种类型的爬虫在生活与工作中非常常见,所以请大家能够熟练这种爬虫流程。后续文章小编也会加大这些的介绍,同时也会对跨页面爬虫进行介绍,敬请期待。最后再次感谢你们的支持与鼓励,你们的陪伴是小编前进的动力!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180813G1RRBK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券