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

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

采用的是Rhinojs引擎。模拟js运行。

使用htmlunit抓取网页大概可以分为以下几个步骤:

1、定义一个WebClient客户端。

  就相当于定义了一个没有界面的浏览器。

2、使用WebClient客户端从指定URL获取HtmlPage。

  HtmlPage中包含目标URL页面中的所有信息。

3、从HtmlPage中获取我们需要的指定元素。

下面就来看一个实例:

package com.fuwh;

import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage; public class Demo01 { public static void main(String[] args) { WebClient webClient=null;
try {
webClient= new WebClient(); //定义一个默认的WebClient
HtmlPage page=webClient.getPage("https://www.cnblogs.com/"); //从指定URL获取HtmlPage
System.out.println(page.asText()); //将HtmlPage转换成字符串打印出来
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
webClient.close(); //关闭客户端
}
}
}

上面的实例中,我们创建的是一个默认的WebClient实例,使WebClient#getBrowserVersion()方法,可以看到,

默认创建的是Chrome版本的浏览器。

当然,我们也可以在创建的时候指定浏览器的版本。

例子:

package com.fuwh;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage; public class Demo01 { public static void main(String[] args) { WebClient webClient=null;
try {
webClient= new WebClient(BrowserVersion.FIREFOX_45); //定义一个WebClient
HtmlPage page=webClient.getPage("https://www.cnblogs.com/"); //从指定URL获取HtmlPage
System.out.println(page.asText()); //将HtmlPage转换成字符串打印出来
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
webClient.close(); //关闭客户端
}
}
}

在BrowserVersion中,定义了很多种浏览器的版本。

在获得一个HtmlPage之后,相对于把整个页面打出来,我们还是更希望能够找出我们想要的元素。

HtmlUnit对于查找指定元素也提供了丰富的支持。

支持使用DOM,CSS和XPath(推荐)的方式。

◇使用DOM方式:

package com.fuwh;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomElement;
import com.gargoylesoftware.htmlunit.html.DomNodeList;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.html.HtmlPage; public class Demo01 { public static void main(String[] args) { WebClient webClient=null;
try {
webClient= new WebClient(BrowserVersion.FIREFOX_45); //定义一个WebClient
final HtmlPage page=webClient.getPage("https://www.cnblogs.com/"); //从指定URL获取HtmlPage /**
* DomElement 的子类:HtmlElement
* HtmlElemnt也有很多子类,基本上涵盖了所有的Html元素
* 例如:HtmlDivision,HtmlInput
*/
System.out.println("=============================================");
//通过id获取指定DOM元素
HtmlDivision htmlDiv=(HtmlDivision) page.getElementById("header");
System.out.println(htmlDiv.asXml()); System.out.println("=============================================");
//通过tagName来获取元素集合
DomNodeList<DomElement> nodeList=page.getElementsByTagName("a");
for (DomElement domElement : nodeList) {
HtmlAnchor htmlAnchor=(HtmlAnchor) domElement;
System.out.println("标题:"+htmlAnchor.asText()+" --> 地址:"+htmlAnchor.getAttribute("href"));
} } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
webClient.close(); //关闭客户端
}
}
}

◇使用CSS方式:

package com.fuwh;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.DomElement;
import com.gargoylesoftware.htmlunit.html.DomNodeList;
import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.html.HtmlPage; public class Demo02 { public static void main(String[] args) { WebClient webClient=null;
try {
webClient= new WebClient(BrowserVersion.FIREFOX_45); //定义一个WebClient
final HtmlPage page=webClient.getPage("https://www.cnblogs.com/"); //从指定URL获取HtmlPage HtmlDivision htmlDiv =page.querySelector("div");//获取第一个div
System.out.println(htmlDiv.asXml()); System.out.println("===================================="); HtmlDivision htmlDiv2=page.querySelector("div#footer_bottom");//也可以指定多个选择器,通过‘,’隔开
System.out.println(htmlDiv2.asXml());
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
webClient.close(); //关闭客户端
}
}
}

◇使用XPath方式:

package com.fuwh;

import java.util.List;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.html.HtmlPage; public class Demo03 { public static void main(String[] args) { WebClient webClient=null;
try {
webClient= new WebClient(BrowserVersion.FIREFOX_45); //定义一个WebClient
final HtmlPage page=webClient.getPage("https://www.cnblogs.com/"); //从指定URL获取HtmlPage List<HtmlDivision> divList=page.getByXPath("//div[@id='cnblogs_a1']");
for (HtmlDivision htmlDivision : divList) {
System.out.println("***********************************************8");
System.out.println(htmlDivision.asXml());
} } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}finally {
webClient.close(); //关闭客户端
}
}
}

HtmlUnit入门一的更多相关文章

  1. HtmlUnit入门二

    由于在在WebClient中,默认支持对CSS,JavaScript的解析,因此会总是会出现很多错误信息,并且执行速度也很慢. 因此,我们可以选择关闭掉WebClient对CSS,JavaScript ...

  2. 【零基础】快速入门爬虫框架HtmlUnit

    迅速的HtmlUnit htmlunit是一款开源的web页面分析工具,理论上来说htmlunit应用于网页的自动化测试,但是相对来说更多人使用它来进行小型爬虫的快速开发.使用htmlunit进行爬虫 ...

  3. Selenium 2 入门

    在多个浏览器中进行 Web 应用程序的端到端功能测试 Selenium 是一款有名的 Web 应用程序测试框架,用于进行功能测试.新版本 Selenium 2 结合了 Selenium 1 和 Web ...

  4. Selenium2入门(二)WebDriver

    前文Selenium2入门(一)说到Selenium是Web 应用程序测试框架,那么如果对一个简单的web应用需求:打开浏览器,登录百度首页,输入“欧洲杯”关键词,点击搜索按钮 这一系列操作,能否用S ...

  5. HttpClient入门

    HttpClient入门 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 H ...

  6. 【转】对于HttpClient和HtmlUnit的理解

    原文地址:http://www.haohaoblog.com/?p=1327&utm_source=tuicool 做Java编程的人其实,很多不懂SEO,也不知道如何让百度收录等等,当然,对 ...

  7. webdriver入门-Java

    webdriver入门-Java   如何用webdriver打开一个浏览器,我们常用的浏览器有firefox和IE两种,firefox是selenium支持得比较成熟的浏览器,很多新的特性都会在fi ...

  8. 【转载】Spring boot学习记录(一)-入门篇

    前言:本系列文章非本人原创,转自:http://tengj.top/2017/04/24/springboot0/ 正文 首先声明,Spring Boot不是一门新技术.从本质上来说,Spring B ...

  9. HttpClient和HtmlUnit的比较总结以及使用技巧

    本文转自: https://blog.csdn.net/zstu_cc/article/details/39250903 https://blog.csdn.net/zstu_cc/article/d ...

随机推荐

  1. Vue 知识复习(上)

    Vue Vue实例 创建实例: var vm = new Vue({ //code }) 数据与方法: 只有当实例被创建时 data 中存在的属性才是响应式的; Vm.b = 'h1' 是不会触发视图 ...

  2. Struts2学习笔记一 简介及入门程序

    Struts2是一个基于MVC设计模式的web应用框架,它本质上相当于一个Sevlet.是Struts1的下一代产品,是在structs1和WebWork技术的基础上进行合并后的全新框架(WebWor ...

  3. Windows下Apache的下载安装启动停止

    一:下载 打开任意浏览器,输入网址:http://httpd.apache.org/ 进入如下界面: 我们选择最新版Apache httpd 2.4.12Released,点击Download,进入如 ...

  4. python web——Django架构

    环境:windows/linux/OS 需要的软件:Firefox 浏览器(别的也可以 不过firfox和python的webdriver兼容性好) git版本控制系统(使用前要配置 用户 编辑器可以 ...

  5. 网络1711班 C语言第四次作业批改总结

    网络1711班 C语言第四次作业批改总结 助教有话说(写在前面) 近来,有同学跟老师和助教们反映:博客作业太多太麻烦,而且对编程能力提高似乎没什么帮助?在这里我要谈一谈我的感想. 博客作业的意义? 首 ...

  6. 设计模式NO.3

    设计模式NO.3 本次博客内容为第三次设计模式的练习.根据老师的要求完成下列题目: 题目1 某商品管理系统的商品名称存储在一个字符串数组中,现需要自定义一个双向迭代器(MyIterator)实现对该商 ...

  7. python 二叉堆

    BinaryHeap() 创建一个新的,空的二叉堆. insert(k) 向堆添加一个新项. findMin() 返回具有最小键值的项,并将项留在堆中. delMin() 返回具有最小键值的项,从堆中 ...

  8. Python randrange() 函数

    Python randrange() 函数  Python 数字 描述 randrange() 方法返回指定递增基数集合中的一个随机数,基数缺省值为1. 语法 以下是 randrange() 方法的语 ...

  9. aws中的路由表

    参考官方文档: 由表中包含一系列被称为路由的规则,可用于判断网络流量的导向目的地. 在您的 VPC 中的每个子网必须与一个路由表关联:路由表控制子网的路由.一个子网一次只能与一个路由表关联,但您可以将 ...

  10. Solr搜索引擎搭建详细过程

    1    什么是solr Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr可以独立运行在Jetty.Tomcat等这些Servlet容器中 ...