c httpclient抓取网页(HtmlUnitJSoup条目使用Java屏幕抓取器应用程序教程(上))
优采云 发布时间: 2021-10-15 11:00c httpclient抓取网页(HtmlUnitJSoup条目使用Java屏幕抓取器应用程序教程(上))
htmlunit 抓取
我最近发表了一篇关于使用 Java 文章 进行屏幕抓取的文章。一些 Twitter 追随者思考为什么我使用 JSoup 而不是流行的、无浏览器的 Web 测试框架 HtmlUnit。我没有具体的原因,所以我决定使用 HtmlUnit 而不是 JSoup 来重现完全相同的屏幕抓取器应用程序教程。
原教程只是从我写的GitHub面试题文章中提取了一些信息。它提取页面标题、作者姓名和页面上所有链接的列表。本教程将做完全相同的事情,只是不同。
HtmlUnit Maven POM 入口
使用 HtmlUnit 的第一步是创建一个基于 Maven 的项目,并将适当的 GAV 添加到 POM 文件的依赖项部分。这是一个完整的 Maven POM 文件示例,其中收录在依赖项中的 HtmlUnit GAV。
4.0.0
com.mcnz.screen.scraper
java-screen-scraper
1.0
net.sourceforge.htmlunit
htmlunit
2.34.1
maven-compiler-plugin
1.8
1.8
HtmlUnit 屏幕截图代码
HtmlUnit 屏幕抓取应用程序创建过程的下一步是使用main 方法生成一个Java 类,然后使用要HtmlUnit 的站点的URL 来抓取创建一个HtmlUnit WebClient 实例。
package com.mcnz.screen.scraper;
import com.gargoylesoftware.htmlunit.*;
import com.gargoylesoftware.htmlunit.html.*;
public class HtmlUnitScraper {
public static void main(String args[]) throws Exception {
String url = "https://www.theserverside.com/video/IBM-Watson-Content-Hub-has-problems-before-you-even-start";
WebClient webClient = new WebClient();
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(false);
}
}
HtmlUnit API
WebClient 类的 getPage (URL) 方法将解析提供的 URL 并返回一个表示网页的 HtmlPage 对象。但是,CSS、JavaScript 和缺少正确配置的 SSL 密钥库可能会导致 getPage(URL) 方法失败。在获取HtmlPage对象之前,最好先通过prototype关闭这三个功能。
webClient.getOptions().setUseInsecureSSL(true);
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(false);
HtmlPage htmlPage = webClient.getPage(url);
在前面的示例中,我们通过捕获要解析的网页的标题来测试 Java 屏幕抓取功能。要使用 HtmlUnit 屏幕抓取工具执行此操作,我们只需要调用 htmlPage 实例上的 getTitle() 方法:
System.out.println(htmlPage.getTitleText ());
运行 Java 屏幕抓取应用程序
此时您可以编译代码并运行应用程序,它将输出页面标题:
Tough sample GitHub interview questions and answers for job candidates
显示作者姓名的页面片段的 CSS 选择器是 #author> div> a。如果将此 CSS 选择器插入到 querySelector(String) 方法中,它将返回一个 DomNode 实例,该实例可用于检查 CSS 选择的结果。只需请求 domNode asText 返回 文章 作者姓名:
DomNode domNode = htmlPage.querySelector("#author > div > a");
System.out.println(domNode.asText ());
原文章的最后一个重要成就是打印出页面上每个锚链接的文本。要为此目的使用 HtmlUnit Java 屏幕抓取工具,请调用 HtmlPage 实例的 getAnchors 方法。这将返回一个 HtmlAnchor 实例列表。然后,我们可以通过调用 getAttribute 方法遍历列表并输出与链接关联的 URL:
List anchors = htmlPage.getAnchors ();
for (HtmlAnchor anchor : anchors) {
System.out.println(anchor.getAttribut e ("href"));
}
当类运行时,输出如下:
JSoup vs HtmlUnit 作为屏幕抓取工具
那么我如何看待这两种不同的方法呢?好吧,如果我要编写自己的 Java 屏幕抓取工具,我可能会选择 HtmlUnit。API 内置了许多实用方法,例如 HtmlPage 的 getAnchors() 方法,可以更轻松地执行常见任务。API 由其维护者定期更新,许多开发人员已经知道如何使用 API,因为它通常用作 Java Web 应用程序的单元测试框架。最后,HtmlUnit 具有处理 CSS 和 JavaScript 的一些高级功能,允许该技术的各种*敏*感*词*应用。
总的来说,这两个 API 是实现 Java 屏幕抓取工具的绝佳选择。你真的不会错的任何人。
您可以在 GitHub 上找到 HtmlUnit 屏幕抓取应用程序的完整代码。
HTMLUnit 屏幕抓取应用程序
翻译自:
htmlunit 抓取