Java编程

java爬去网易云音乐,java爬取网易云音乐

首发于David教你学编程写文章用Java实现网易云音乐爬虫David天码营-技术学习智能服务平台-创始人520 人赞同了该文章由Cliff发表在天码营

起因前两天在知乎上看到一个帖子《网易云音乐有哪些评论过万的歌曲?》,一时技痒,用Java实现了一个简单的爬虫,这里简单记录一下。

最终的结果开放出来了,大家可以随意访问,请戳这里>>>>>> 网易云音乐爬虫结果。

爬虫简介网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,一个通用的网络爬虫大致包含以下几个步骤:

网络爬虫的大致流程如上图所示,无论你是做什么样的爬虫应用,整体流程都是大同小异。现在,我们就根据网易云音乐来定制一个专门爬取音乐评论数量的特定网络爬虫。

推荐页面排行榜列表以及排行榜页面歌单列表以及歌单页面主播电台列表以及主播电台页面歌手列表以及歌手页面专辑列表(新碟上架)以及专辑页面歌曲页面我们最终需要爬取的数据在歌曲页面中,该页面里包含了歌曲的名称以及歌曲的评论数量。

另外,我们还需要尽可能多的获取歌曲页面,这些信息我们可以从前面6种类型的页面拿到。其中,歌单列表以及歌单页面结构最简单,歌单列表直接分页就可以拿到。因此,我们选择歌单页面作为我们的初始页面,然后歌单列表–歌单–歌曲一路爬下去即可。

设计数据模型通过上述分析,我们可以知道我们要做两件事情,一是爬取页面歌单列表–歌单–歌曲,二是将最终的结果存储起来。因此,我们只需要两个对象,一个用来存储页面相关的信息,url、页面类型、是否被爬过(html和title作为临时数据存储),另外一个用来存储歌曲相关信息,url、歌曲名,评论数。因此,model类如下:

获取html无论想要从什么网站中拿到数据,获取其html代码都是最最基础的一步,这里我们使用jsoup来获取页面信息,在CrawlerThread中添加如下代码:

解析歌单列表页面得到html后,我们来解析歌单列表,拿到页面中的所有歌单,Jsoup包含了html解析相关的功能,我们无需添加其他依赖,直接在CrawlerThread中添加如下代码:

解析歌曲页面终于到歌曲页面了,这里网易云音乐做了反爬处理,获取数据时的参数需要经过加密处理,这里我们不纠结于具体算法,如果有兴趣的直接看参考代码,我们只看关键代码:

实现爬虫重新回顾一下流程图,我们发现其中有很重要的一个对象是爬虫队列,爬虫队列的实现方法有很多种,自己实现,mysql、redis、MongoDB等等都可以满足我们的需求,不同的选择会导致我们实现的不一致。

综合考虑,我们使用Mysql+ Spring Data JPA + Spring MVC来跑我们的整套框架,最终还可以将爬下来的数据通过web服务展现出来。更深入地学习Spring MVC,请大家参考Spr

Similar Posts

发表评论

邮箱地址不会被公开。 必填项已用*标注