htmlunit抓取动态网页(开源的Java页面分析工具,被誉为Java浏览器的开源实现 )

优采云 发布时间: 2022-02-23 13:20

  htmlunit抓取动态网页(开源的Java页面分析工具,被誉为Java浏览器的开源实现

)

  一、简介

  它是一个开源的Java页面分析工具。阅读完页面后,可以有效地使用htmlunit分析页面上的内容

  可以模拟浏览器的操作,被称为Java浏览器的开源实现

  1、是一个无界面浏览器Java程序

  对HTML文档进行建模,提供调用页面、填写表单、单机链接等API。

  和浏览器一样

  2、拥有不断改进的 JavaScript 支持,甚至可以使用相当复杂的 AJAX 库

  根据配置模拟 Chrome、Firefox 或 IE 等浏览器

  3、通常用于测试或从网站检索信息二、使用场景

  一般情况下,可以使用Apache的HttpClient组件来获取HTML页面信息。 HttpClient实现的http请求返回的响应一般是纯文本文档页面,也就是最原创的html页面。

  对于静态页面,使用HttpClient爬取所需信息。

  但是对于动态网页,更多的数据是通过异步JS代码获取和渲染的,初始的html页面是不收录这部分数据的。

  三、代码演示

  1、获取页面

  public class HtmlUnitDemo {

public static void main(String[] args) throws IOException {

String str;

// 创建一个 webClient

// WebClient webClient = new WebClient(); // 任意浏览器打开

WebClient webClient = new WebClient(BrowserVersion.CHROME); // 使用 Chrome 读取页面

// htmlunit 对 JS 和 CSS 的支持不好,所以关闭

webClient.getOptions().setJavaScriptEnabled(false);

webClient.getOptions().setCssEnabled(false);

// 获取页面

HtmlPage page = webClient.getPage("http://www.baidu.com"); // 抛出 IOException

// System.out.println(page);

// 获取页面的标题

str = page.getTitleText();

System.out.println("Title: " + str);

// 获取页面的 XML 代码

str = page.asXml();

System.out.println("XML: \n" + str);

// 获取页面的文本

str = page.asText();

System.out.println("文本: \n" + str);

// 关闭 webClient

webClient.close();

}

}

  2、获取页面的指定元素

  public class HtmlUnitDemo {

public static void main(String[] args) throws IOException {

// 创建一个 webClient

// WebClient webClient = new WebClient(); // 任意浏览器打开

WebClient webClient = new WebClient(BrowserVersion.CHROME); // 使用 Chrome 读取页面

// htmlunit 对 JS 和 CSS 的支持不好,所以关闭

webClient.getOptions().setJavaScriptEnabled(false);

webClient.getOptions().setCssEnabled(false);

HtmlPage page = webClient.getPage("http://www.baidu.com");

// 获得页面的指定元素

// 通过 id 获得“百度一下”按钮

HtmlInput btn = page.getHtmlElementById("su");

System.out.println(btn.getDefaultValue());

// 关闭 webClient

webClient.close();

}

}

  3、元素检索

  public class HtmlUnitDemo {

public static void main(String[] args) throws IOException {

// 创建一个 webClient

// WebClient webClient = new WebClient(); // 任意浏览器打开

WebClient webClient = new WebClient(BrowserVersion.CHROME); // 使用 Chrome 读取页面

// htmlunit 对 JS 和 CSS 的支持不好,所以关闭

webClient.getOptions().setJavaScriptEnabled(false);

webClient.getOptions().setCssEnabled(false);

HtmlPage page = webClient.getPage("http://www.baidu.com");

// 元素检索

// 查找所有的 div

List hbList = page.getByXPath("//div");

// System.out.println(hbList);

HtmlDivision hb = (HtmlDivision)hbList.get(0); // 只获取第一个 div

System.out.println(hb.toString());

// 查找并获取特定的 input

List inputList = page.getByXPath("//input[@id='su']");

HtmlInput input = (HtmlInput) inputList.get(0);

System.out.println(input.toString());

// 关闭 webClient

webClient.close();

}

}

  4、提交搜索

  public class HtmlUnitDemo {

public static void main(String[] args) throws IOException {

// 创建一个 webClient

// WebClient webClient = new WebClient(); // 任意浏览器打开

WebClient webClient = new WebClient(BrowserVersion.CHROME); // 使用 Chrome 读取页面

// htmlunit 对 JS 和 CSS 的支持不好,所以关闭

webClient.getOptions().setJavaScriptEnabled(false);

webClient.getOptions().setCssEnabled(false);

HtmlPage page = webClient.getPage("http://www.baidu.com");

// 提交搜索

// 获取搜索输入框并提交搜索内容

HtmlInput input = page.getHtmlElementById("kw");

System.out.println(input.toString());

input.setValueAttribute("htmlunit API");

System.out.println(input.toString());

// 获取搜索按钮并点击

HtmlInput btn = page.getHtmlElementById("su");

HtmlPage page1 = btn.click();

// 输出新页面的文本

System.out.println(page1.asText());

// 关闭 webClient

webClient.close();

}

}

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线