c httpclient抓取网页(HtmlUnitJSoup条目使用Java屏幕抓取器应用程序教程(上))

优采云 发布时间: 2021-10-15 11:00

  c 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 抓取

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线