Java爬虫入门简介(一) —— HttpClient请求

数据是科研活动重要的基础。本系列博客将讲述如何使用Java工具获取网络的数据。

首先,我们讲述一下爬虫的基本原理。爬虫的基本原理很简单,就是利用程序访问互联网,然后将数据保存到本地中。我们都知道,互联网提供的服务大多数是以网站的形式提供的。我们需要的数据一般都是从网站中获取的,如电商网站商品信息、商品的评论、微博的信息等。爬虫和我们手动将看到的数据复制粘贴下来是类似的,只是获取大量的数据靠人工显然不太可能。因此,需要我们使用工具来帮助获取知识。使用程序编写爬虫就是使用程序编写一些网络访问的规则,将我们的目标数据保存下来。接下来,让我们开始从头搭建一个爬虫的案例。

一、环境的准备

这里的环境就是指开发环境,本博客将使用Java编写爬虫程序,因此,需要构建Java的编程环境。需要安装的软件包括(注意,我的电脑使用的是windows X64的程序,请选择对应的JDK版本,要使用8.0及以上):
1、JDK 8.0: http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-windows-x64.exe
2、IntelliJ IDEA: https://download.jetbrains.8686c.com/idea/ideaIC-2017.2.exe

JDK的安装和环境变量的配置网上有很多,就不说了。IntelliJ IDEA是个傻瓜式的安装,基本不会有问题。也不说了。

二、创建工程

安装好环境后,我们打开IntelliJ IDEA,然后创建一个Maven工程,Group Id和Artifact Id自己随便写没关系的。创建完之后我们的目录就如下图所示了。


Java爬虫入门简介(一) —— HttpClient请求
Java爬虫入门简介(一) —— HttpClient请求

好了,下面我们就开始编写爬虫了。

三、第一个示例

首先,假设我们需要爬取数据学习网站上第一页的博客(http://www.datalearner.com/blog )。首先,我们需要使用maven导入HttpClient 4.5.3这个包(这是目前最新的包,你可以根据需要使用其他的版本)。那么,我们在pom.xml中添加如下语句:


  1. <dependencies>
  2. <dependency>
  3. <groupId>org.apache.httpcomponents</groupId>
  4. <artifactId>httpclient</artifactId>
  5. <version>4.5.3</version>
  6. </dependency>
  7. </dependencies>

Java本身提供了关于网络访问的包,在java.net中,然后它不够强大。于是Apache基金会发布了开源的http请求的包,即HttpClient,这个包提供了非常多的网络访问的功能。在这里,我们也是使用这个包来编写爬虫。好了,使用pom.xml下载完这个包之后我们就可以开始编写我们的第一个爬虫例子了。其代码如***意,我们的程序是建立在test包下面的,因此,需要在这个包下才能运行):


  1. package test;
  2. import org.apache.http.HttpEntity;
  3. import org.apache.http.client.methods.CloseableHttpResponse;
  4. import org.apache.http.client.methods.HttpGet;
  5. import org.apache.http.impl.client.CloseableHttpClient;
  6. import org.apache.http.impl.client.HttpClients;
  7. import org.apache.http.util.EntityUtils;
  8. import java.io.IOException;
  9. /**
  10. * 第一个爬虫测试
  11. * Created by DuFei on 2017/7/27.
  12. */
  13. public class FirstTest {
  14. public static void main(String[] args) {
  15. //建立一个新的请求客户端
  16. CloseableHttpClient httpClient = HttpClients.createDefault();
  17. //使用HttpGet方式请求网址
  18. HttpGet httpGet = new HttpGet("http://www.datalearner.com/blog");
  19. //获取网址的返回结果
  20. CloseableHttpResponse response = null;
  21. try {
  22. response = httpClient.execute(httpGet);
  23. } catch (IOException e) {
  24. e.printStackTrace();
  25. }
  26. //获取返回结果中的实体
  27. HttpEntity entity = response.getEntity();
  28. //将返回的实体输出
  29. try {
  30. System.out.println(EntityUtils.toString(entity));
  31. EntityUtils.consume(entity);
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. }
  35. }
  36. }

如上面的代码所示,爬虫的第一步需要构建一个客户端,即请求端,我们这里使用CloseableHttpClient作为我们的请求端,然后确定使用哪种方式请求什么网址,再然后使用HttpResponse获取请求的地址对应的结果即可。最后取出HttpEntity转换一下就可以得到我们请求的网址对应的内容了。上述程序对应的输出如下图所示:


Java爬虫入门简介(一) —— HttpClient请求

显然,这就是我们需要的网址对应的页面的源代码。于是我们的第一个爬虫就成功的将网门需要的页面的内容下载下来了。