HtmlUnit入门一
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入门一的更多相关文章
- HtmlUnit入门二
由于在在WebClient中,默认支持对CSS,JavaScript的解析,因此会总是会出现很多错误信息,并且执行速度也很慢. 因此,我们可以选择关闭掉WebClient对CSS,JavaScript ...
- 【零基础】快速入门爬虫框架HtmlUnit
迅速的HtmlUnit htmlunit是一款开源的web页面分析工具,理论上来说htmlunit应用于网页的自动化测试,但是相对来说更多人使用它来进行小型爬虫的快速开发.使用htmlunit进行爬虫 ...
- Selenium 2 入门
在多个浏览器中进行 Web 应用程序的端到端功能测试 Selenium 是一款有名的 Web 应用程序测试框架,用于进行功能测试.新版本 Selenium 2 结合了 Selenium 1 和 Web ...
- Selenium2入门(二)WebDriver
前文Selenium2入门(一)说到Selenium是Web 应用程序测试框架,那么如果对一个简单的web应用需求:打开浏览器,登录百度首页,输入“欧洲杯”关键词,点击搜索按钮 这一系列操作,能否用S ...
- HttpClient入门
HttpClient入门 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 H ...
- 【转】对于HttpClient和HtmlUnit的理解
原文地址:http://www.haohaoblog.com/?p=1327&utm_source=tuicool 做Java编程的人其实,很多不懂SEO,也不知道如何让百度收录等等,当然,对 ...
- webdriver入门-Java
webdriver入门-Java 如何用webdriver打开一个浏览器,我们常用的浏览器有firefox和IE两种,firefox是selenium支持得比较成熟的浏览器,很多新的特性都会在fi ...
- 【转载】Spring boot学习记录(一)-入门篇
前言:本系列文章非本人原创,转自:http://tengj.top/2017/04/24/springboot0/ 正文 首先声明,Spring Boot不是一门新技术.从本质上来说,Spring B ...
- HttpClient和HtmlUnit的比较总结以及使用技巧
本文转自: https://blog.csdn.net/zstu_cc/article/details/39250903 https://blog.csdn.net/zstu_cc/article/d ...
随机推荐
- Python下载图片小程序
欢迎大侠们指正批评 思路: 1.引入相关的python文件(import re import urllib) 2.读取对应网页的html文件(使用 urllib) def getHtml(url): ...
- 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 ...
- 利用PCA降维
参考:<机器学习实战>- Machine Learning in Action 一. 基本思想 PCA(Principal Component Analysis),主成分分析.是目前应用 ...
- 项目Alpha冲刺Day4
一.会议照片 二.项目进展 1.今日安排 学习熟悉前台框架且搭建前台页面框架. 2.问题困难 使用了前端的构建工具webpack,困难在于怎么使用gradle结合它连同后台框架中的配置一起打包,因为本 ...
- 软件工程第三次作业-结对作业NO.1
第一次结对作业 结对人员: 潘伟靖 170320077 张 松 170320079 方案分析 我们对所供的资料进行分析,如下: 从提供的资料可以看出,需要解决的问题以及满足的需求主要有两类目标用户,各 ...
- 【iOS】OC-UTC日期字符串格式化
NSLog(@"%@",[NSDate date]); NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init ...
- Flask 扩展 Mail
安装 pip install flask-mail from flask import Flask from flask_mail import Mail, Message app = Flask(_ ...
- Nginx在windows环境下的安装与简单配置
版权声明:本文为博主原创文章,未经博主允许不得转载. 一. 下载并安装Nginx 去Nginx官网下载 我这里选取nginx/Windows-1.10.3版本,下载后解压出来即可,解压出来的路径不能含 ...
- Gson解析Json数组
需求:从steam官网获取英雄数据,即为Json数据,并导入到本地数据库 Json数据是这样的 { "result": { "heroes": [ { &quo ...
- NFS PersistentVolume - 每天5分钟玩转 Docker 容器技术(151)
上一节我们介绍了 PV 和 PVC,本节通过 NFS 实践. 作为准备工作,我们已经在 k8s-master 节点上搭建了一个 NFS 服务器,目录为 /nfsdata: 下面创建一个 PV mypv ...