如何使用 Java 有效地解析 HTML?

2022-08-31 06:13:47

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

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

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

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

  1. 速度
  2. 通过“id”或“name”或“tag type”轻松找到任何HtmlElement。

如果它不清理肮脏的HTML代码,对我来说没关系。我不需要清理任何HTML源代码。我只需要一种最简单的方法来跨HtmlElements移动并从中收集数据。


答案 1

自插拔:我刚刚发布了一个新的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();

有关详细信息,请参阅选择器 javadoc。

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


答案 2

到目前为止,我看到的最好的是HtmlCleaner

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

使用HtmlCleaner,您可以使用XPath找到任何元素。

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