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

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

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

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

1、定义一个WebClient客户端。

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

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

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

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

下面就来看一个实例:

  1. package com.fuwh;
  2.  
  3. import com.gargoylesoftware.htmlunit.WebClient;
  4. import com.gargoylesoftware.htmlunit.html.HtmlPage;
  5.  
  6. public class Demo01 {
  7.  
  8. public static void main(String[] args) {
  9.  
  10. WebClient webClient=null;
  11. try {
  12. webClient= new WebClient(); //定义一个默认的WebClient
  13. HtmlPage page=webClient.getPage("https://www.cnblogs.com/"); //从指定URL获取HtmlPage
  14. System.out.println(page.asText()); //将HtmlPage转换成字符串打印出来
  15. } catch (Exception e) {
  16. // TODO: handle exception
  17. e.printStackTrace();
  18. }finally {
  19. webClient.close(); //关闭客户端
  20. }
  21. }
  22. }

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

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

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

例子:

  1. package com.fuwh;
  2.  
  3. import com.gargoylesoftware.htmlunit.BrowserVersion;
  4. import com.gargoylesoftware.htmlunit.WebClient;
  5. import com.gargoylesoftware.htmlunit.html.HtmlPage;
  6.  
  7. public class Demo01 {
  8.  
  9. public static void main(String[] args) {
  10.  
  11. WebClient webClient=null;
  12. try {
  13. webClient= new WebClient(BrowserVersion.FIREFOX_45); //定义一个WebClient
  14. HtmlPage page=webClient.getPage("https://www.cnblogs.com/"); //从指定URL获取HtmlPage
  15. System.out.println(page.asText()); //将HtmlPage转换成字符串打印出来
  16. } catch (Exception e) {
  17. // TODO: handle exception
  18. e.printStackTrace();
  19. }finally {
  20. webClient.close(); //关闭客户端
  21. }
  22. }
  23. }

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

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

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

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

◇使用DOM方式:

  1. package com.fuwh;
  2.  
  3. import com.gargoylesoftware.htmlunit.BrowserVersion;
  4. import com.gargoylesoftware.htmlunit.WebClient;
  5. import com.gargoylesoftware.htmlunit.html.DomElement;
  6. import com.gargoylesoftware.htmlunit.html.DomNodeList;
  7. import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
  8. import com.gargoylesoftware.htmlunit.html.HtmlDivision;
  9. import com.gargoylesoftware.htmlunit.html.HtmlPage;
  10.  
  11. public class Demo01 {
  12.  
  13. public static void main(String[] args) {
  14.  
  15. WebClient webClient=null;
  16. try {
  17. webClient= new WebClient(BrowserVersion.FIREFOX_45); //定义一个WebClient
  18. final HtmlPage page=webClient.getPage("https://www.cnblogs.com/"); //从指定URL获取HtmlPage
  19.  
  20. /**
  21. * DomElement 的子类:HtmlElement
  22. * HtmlElemnt也有很多子类,基本上涵盖了所有的Html元素
  23. * 例如:HtmlDivision,HtmlInput
  24. */
  25. System.out.println("=============================================");
  26. //通过id获取指定DOM元素
  27. HtmlDivision htmlDiv=(HtmlDivision) page.getElementById("header");
  28. System.out.println(htmlDiv.asXml());
  29.  
  30. System.out.println("=============================================");
  31. //通过tagName来获取元素集合
  32. DomNodeList<DomElement> nodeList=page.getElementsByTagName("a");
  33. for (DomElement domElement : nodeList) {
  34. HtmlAnchor htmlAnchor=(HtmlAnchor) domElement;
  35. System.out.println("标题:"+htmlAnchor.asText()+" --> 地址:"+htmlAnchor.getAttribute("href"));
  36. }
  37.  
  38. } catch (Exception e) {
  39. // TODO: handle exception
  40. e.printStackTrace();
  41. }finally {
  42. webClient.close(); //关闭客户端
  43. }
  44. }
  45. }

◇使用CSS方式:

  1. package com.fuwh;
  2.  
  3. import com.gargoylesoftware.htmlunit.BrowserVersion;
  4. import com.gargoylesoftware.htmlunit.WebClient;
  5. import com.gargoylesoftware.htmlunit.html.DomElement;
  6. import com.gargoylesoftware.htmlunit.html.DomNodeList;
  7. import com.gargoylesoftware.htmlunit.html.HtmlAnchor;
  8. import com.gargoylesoftware.htmlunit.html.HtmlDivision;
  9. import com.gargoylesoftware.htmlunit.html.HtmlPage;
  10.  
  11. public class Demo02 {
  12.  
  13. public static void main(String[] args) {
  14.  
  15. WebClient webClient=null;
  16. try {
  17. webClient= new WebClient(BrowserVersion.FIREFOX_45); //定义一个WebClient
  18. final HtmlPage page=webClient.getPage("https://www.cnblogs.com/"); //从指定URL获取HtmlPage
  19.  
  20. HtmlDivision htmlDiv =page.querySelector("div");//获取第一个div
  21. System.out.println(htmlDiv.asXml());
  22.  
  23. System.out.println("====================================");
  24.  
  25. HtmlDivision htmlDiv2=page.querySelector("div#footer_bottom");//也可以指定多个选择器,通过‘,’隔开
  26. System.out.println(htmlDiv2.asXml());
  27. } catch (Exception e) {
  28. // TODO: handle exception
  29. e.printStackTrace();
  30. }finally {
  31. webClient.close(); //关闭客户端
  32. }
  33. }
  34. }

◇使用XPath方式:

  1. package com.fuwh;
  2.  
  3. import java.util.List;
  4.  
  5. import com.gargoylesoftware.htmlunit.BrowserVersion;
  6. import com.gargoylesoftware.htmlunit.WebClient;
  7. import com.gargoylesoftware.htmlunit.html.HtmlDivision;
  8. import com.gargoylesoftware.htmlunit.html.HtmlPage;
  9.  
  10. public class Demo03 {
  11.  
  12. public static void main(String[] args) {
  13.  
  14. WebClient webClient=null;
  15. try {
  16. webClient= new WebClient(BrowserVersion.FIREFOX_45); //定义一个WebClient
  17. final HtmlPage page=webClient.getPage("https://www.cnblogs.com/"); //从指定URL获取HtmlPage
  18.  
  19. List<HtmlDivision> divList=page.getByXPath("//div[@id='cnblogs_a1']");
  20. for (HtmlDivision htmlDivision : divList) {
  21. System.out.println("***********************************************8");
  22. System.out.println(htmlDivision.asXml());
  23. }
  24.  
  25. } catch (Exception e) {
  26. // TODO: handle exception
  27. e.printStackTrace();
  28. }finally {
  29. webClient.close(); //关闭客户端
  30. }
  31. }
  32. }

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. Python下载图片小程序

    欢迎大侠们指正批评 思路: 1.引入相关的python文件(import re  import urllib) 2.读取对应网页的html文件(使用 urllib) def getHtml(url): ...

  2. Leetcode 5——Median of Two Sorted Arrays

    题目: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the ...

  3. 利用PCA降维

    参考:<机器学习实战>- Machine Learning in Action 一. 基本思想  PCA(Principal Component Analysis),主成分分析.是目前应用 ...

  4. 项目Alpha冲刺Day4

    一.会议照片 二.项目进展 1.今日安排 学习熟悉前台框架且搭建前台页面框架. 2.问题困难 使用了前端的构建工具webpack,困难在于怎么使用gradle结合它连同后台框架中的配置一起打包,因为本 ...

  5. 软件工程第三次作业-结对作业NO.1

    第一次结对作业 结对人员: 潘伟靖 170320077 张 松 170320079 方案分析 我们对所供的资料进行分析,如下: 从提供的资料可以看出,需要解决的问题以及满足的需求主要有两类目标用户,各 ...

  6. 【iOS】OC-UTC日期字符串格式化

    NSLog(@"%@",[NSDate date]); NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init ...

  7. Flask 扩展 Mail

    安装 pip install flask-mail from flask import Flask from flask_mail import Mail, Message app = Flask(_ ...

  8. Nginx在windows环境下的安装与简单配置

    版权声明:本文为博主原创文章,未经博主允许不得转载. 一. 下载并安装Nginx 去Nginx官网下载 我这里选取nginx/Windows-1.10.3版本,下载后解压出来即可,解压出来的路径不能含 ...

  9. Gson解析Json数组

    需求:从steam官网获取英雄数据,即为Json数据,并导入到本地数据库 Json数据是这样的 { "result": { "heroes": [ { &quo ...

  10. NFS PersistentVolume - 每天5分钟玩转 Docker 容器技术(151)

    上一节我们介绍了 PV 和 PVC,本节通过 NFS 实践. 作为准备工作,我们已经在 k8s-master 节点上搭建了一个 NFS 服务器,目录为 /nfsdata: 下面创建一个 PV mypv ...