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. 201621123050 《Java程序设计》第3周学习总结

    1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识点组织起来.请使用工具画出本周学习到的知识点及知识点之间的联系.步骤如下: 1.1 写出你 ...

  2. 冲刺NO.6

    Alpha冲刺第六天 站立式会议 项目进展 项目中学生基本信息管理,与系统管理员模块基本完成,团队开始编写学生信用信息模块内容与奖惩事务管理内容,准备开始对已完成模块进行测试. 问题困难 团队成员对前 ...

  3. C语言——第七周作业

    题目 题目一:求交错序列前N项和 1.实验代码 #include <stdio.h> int main() { int n , i , b ; , a , c ; scanf(" ...

  4. 转 Eclipse快捷键调试大全

    (1)Ctrl+M --切换窗口的大小(2)Ctrl+Q --跳到最后一次的编辑处(3)F2      ---重命名类名 工程名 --当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时To ...

  5. 利用python实现简单登陆注册系统

    #!/usr/bin/env python # -*- coding:utf-8 -*- def login(username,password): ''' :param username:用户名 : ...

  6. Angular.js 1++快速上手

    AngularJS诞生于2009年,由Misko Hevery 等人创建,后为Goole所收购.是一款优秀的前端JS框架.AngularJS有着诸多特性,最为核心的是:MVC,撗块化,自动化双向数据绑 ...

  7. nyoj 开方数

    开方数 时间限制:500 ms  |  内存限制:65535 KB 难度:3   描述 现在给你两个数 n 和 p ,让你求出 p 的开 n 次方.   输入 每组数据包含两个数n和p.当n和p都为0 ...

  8. 微信浏览器的页面在PC端访问

    微信浏览器的页面在PC端访问: 普通的在微信浏览器看的页面如果不在php代码中解析一下,然后复制链接在PC打开就出现无法访问,因为它复制的地址是: https://open.weixin.qq.com ...

  9. python识别验证码——PIL,pytesser,pytesseract的安装

    1.使用Python识别验证码需要安装Python的图像处理模块(PIL.pytesser.pytesseract) (安装过程需要pip,在我的Python中已经安装pip了,pip的安装就不在赘述 ...

  10. [Oracle]undo表空间使用量为100%

    在Toad中发现undo表空间undotbs1使用量已经达到100%,但是奇怪的是数据库并没有hang住,依然可以正常运转 通过Oracle提供的EM查看undotbs1表空间的使用,也达到了78.8 ...