如何用Java高效解析HTML?

问题描述 投票:0回答:3

我在工作中进行了大量的 HTML 解析。到目前为止,我一直在使用 HtmlUnit 无头浏览器进行解析和浏览器自动化。

现在,我想将这两个任务分开。

我想使用轻量级 HTML 解析器,因为在 HtmlUnit 中首先加载页面,然后获取源代码并解析它需要花费很多时间。

我想知道哪个HTML解析器可以有效地解析HTML。我需要

  1. 速度
  2. 通过“id”或“名称”或“标签类型”轻松定位任何 HtmlElement。

如果它不清除脏的 HTML 代码,那对我来说就没问题了。我不需要清理任何 HTML 源代码。我只需要一种最简单的方法来移动 HtmlElements 并从中获取数据。

java html parsing html-parsing web-scraping
3个回答
432
投票

js汤

自插:我刚刚发布了一个新的 Java HTML 解析器:jsoup。我在这里提到它是因为我认为它会做你想要的事情。

它的绝妙技巧是使用 CSS 选择器语法来查找元素,例如:

String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);
Elements links = doc.select("a");
Element head = doc.select("head").first();

请参阅 Selector javadoc 了解更多信息。

这是一个新项目,因此非常欢迎任何改进的想法!


33
投票

迄今为止我见过的最好的是HtmlCleaner

HtmlCleaner 是用 Java 编写的开源 HTML 解析器。 Web 上的 HTML 通常是脏的、格式错误的并且不适合进一步处理。对于此类文档的任何严重消耗,有必要首先清理混乱并为标签、属性和普通文本带来顺序。对于给定的 HTML 文档,HtmlCleaner 会对各个元素重新排序并生成格式正确的 XML。默认情况下,它遵循大多数 Web 浏览器用于创建文档对象模型的类似规则。但是,用户可以提供自定义标签和规则集以进行标签过滤和平衡。

使用 HtmlCleaner,您可以使用 XPath 定位任何元素。

对于其他 html 解析器,请参阅 这个 SO 问题


© www.soinside.com 2019 - 2024. All rights reserved.