htmlunit helloWorld实现

htmlunit简介

htmlunit 是一款开源的java 页面分析工具,读取页面后使用htmlunit分析页面上的内容。

项目可以模拟浏览器运行,被誉为java浏览器的开源实现。是一个没有界面的浏览器,运行速度迅速。

是junit的扩展之一,采用的是Rhinojs引擎,模拟js运行


常规意义上,该项目可以用来进行页面的测试工作,实现网页自动化测试,(包括JS)。但是一般来说,在小型爬虫项目中,这种框架十分常用,可以有效的分析出 dom的标签,并且有效的运行页面上的js以便得到一些需要执行JS才能得到的值。我们研究的爬虫应用中 仅仅用Httpclient+jsoup是不够的,因为有些页面数据是js加载出来的 httpclient解析不出来,比如百度云用户页面,淘宝页面,连开源中国博客的博客内容都是Js加载或者处理的,所以httpClient是解析不出来的,这里htmlunit就是一个很好的方案,内嵌js浏览器,模拟Js运行,把结果执行出来。这个就是我们想要的。

所以搞爬虫,htmlunit必须要掌握好;

htmlunit helloWorld实现

建一个Maven普通客户端项目

pom.xml引入htmlunit支持:

1
2
3
4
5
<dependency>
    <groupId>net.sourceforge.htmlunit</groupId>
    <artifactId>htmlunit</artifactId>
    <version>2.26</version>
</dependency>


写一个测试类,来解析www.java1234.com 获取网页html以及网页文本,这里有点类似httpClient,但是底层执行过程默认多了一个js执行过程(当然htmlunit提供了关闭js解析设置); 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package com.open1111;
 
import java.io.IOException;
import java.net.MalformedURLException;
 
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
 
public class HtmlUnitTest {
 
    public static void main(String[] args) {
        WebClient webClient=new WebClient(); // 实例化Web客户端  
        try {
            HtmlPage page=webClient.getPage("http://www.java1234.com"); // 解析获取页面
            System.out.println("网页html:"+page.asXml());  // 获取Html
            System.out.println("====================");
            System.out.println("网页文本:"+page.asText()); // 获取文本
        } catch (FailingHttpStatusCodeException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            webClient.close(); // 关闭客户端,释放内存
        }
    }
}


运行输出:

htmlunit helloWorld实现


htmlunit helloWorld实现