网络爬虫是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本,一个通用的网络爬虫大致包含以下几个步骤:
网络爬虫的大致流程如上图所示,无论你是做什么样的爬虫应用,整体流程都是大同小异。
现在,我们就根据网易云音乐来定制一个专门爬取音乐评论数量的特定网络爬虫,我们首先确定我们的实验环境。
工欲善其事,必先利其器
一个高效的开发环境对我们的编码效率的提升是巨大的,在开发Web应用之前,要先搭建好本地的安装环境,当然我们不会事无巨细地描述环境中每一种工具的安装步骤和用法,需要你能够从参考材料以及Google中获取有用的信息。
我们推荐安装JavaSE Development Kit 8,我们在后续内容中会用到Java 8的新特性。
IDE我们推荐使用Eclipse或IntelliJ IDEA(当然还有很多别的选择),它们对Maven项目的支持非常完善,自动提示、补全功能异常强大,对于开发效率的提升非常明显。
Maven是Java世界中最流行的项目构建工具,理论上来说在安装了IDE后,IDE内部会自带一个Maven的安装版本,如果想在命令行工具中使用Maven命令,可以单独进行安装。
参考:
如果想深入了解,推荐Maven实战。
在编写爬虫之前,我们需要对网易云音乐网站网页类型进行分析,确认哪些页面是我们需要的,哪些页面是我们可以忽略的。
进入网易云音乐首页,浏览后发现其大概有这么几种类型的URL:
最终需要爬取的数据在歌曲页面中,该页面里包含了歌曲的名称以及歌曲的评论数量。
另外,我们还需要尽可能多的获取歌曲页面,这些信息我们可以从前面6种类型的页面拿到。其中,歌单列表以及歌单页面结构最简单,歌单列表直接分页就可以拿到。因此,我们选择歌单页面作为我们的初始页面,然后歌单列表-->歌单-->歌曲一路爬下去即可。
我们知道,无论想要从什么网站中拿到数据,获取其HTML代码都是最最基础的一步。接下来,我们就开始新建我们的爬虫项目,并且通过Jsoup
获取网页信息。
我们的所有代码都会通过Maven进行管理,因此,我们首先来新建一个Maven项目,新建成功后,项目结构如下:
基础项目代码我们已经放入了参考代码当中,大家可以直接下载参考代码并放入作业代码当中。
Jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
Jsoup的主要功能如下:
在这节课中,我们需要通过Jsoup从一个URL中拿到相应的HTML,因此,我们首先在pom.xml
中引入Jsoup
:
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.7.2</version>
</dependency>
Jsoup
类有很多很实用的方法,我们可以通过下列方法拿到一个URL所对应的HTML:
Connection.Response response = Jsoup.connect(url).timeout(3000).execute();
System.out.println(response.body());
我们可以看到,执行连接后将返回一个类型为Connection.Response
的对象,该对象包含了连接的所有信息,包括:
如果想更多的了解Jsoup的相关信息,请参考jsoup Cookbook(中文版)。
在作业中,我们需要实现HtmlFetcher
类中的fetch
方法,通过jsoup拿到一个url对应的HTML。那么,当我们写完代码,如果验证我们的代码是否正确呢?我们可以看到,参考代码中我们已经给出了一个main
函数:
public static void main(String[] args) throws Exception {
HtmlFetcher htmlFetcher = new HtmlFetcher();
System.out.println(htmlFetcher.fetch("http://music.163.com/#/discover/playlist/?order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset=0"));
}
通过这个函数,我们可以查看fetch
方法的返回结果,并且根据返回结果验证我们的代码是否正确。在eclipse中,只需要右键main方法->Run As->Java Application,我们就能在控制台中看见运行的结果了,快去实现作业试试吧。
登录发表评论 登录 注册
如何获取歌曲的信息