HtmlUnit I 入门
最编程
2024-06-23 15:49:46
...
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 自动登录示例
推荐阅读
-
STM32 I2C 通信协议详解
-
[C 语言教程] [嵌入式程序设计] (I) 简介和先决条件 (II) 嵌入式程序设计基础 (III) 硬件基础 (IV) 硬件寄存器操作
-
Golang 并发编程入门:Goroutine 简介和基本用法
-
[Flutter] 基本入门:基本代码结构
-
[红太阳安全] vulnstack (I) - 范围渗透
-
[无标题] VUE 入门 如何创建 vue 项目
-
LeetCode:计算满足 k 约束 I 的子串数量(滑动窗口 Java)
-
Linux] 内存文件系统 I/O、重定向内存文件系统 I/O、重定向
-
网页前端开发的 HTML 入门:标题标签 heading
-
编程入门:大学新生实用指南