我如何有效地解析HTML与Java?

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

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

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

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

  1. 速度
  2. 通过它的"id"或“;name"或者“标签类型”。

如果它不清除肮脏的HTML代码,对我来说就可以了。我不需要清除任何HTML源代码。我只需要一个最简单的方法来跨越HtmlElements并从它们中获取数据。

203473 次浏览

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

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

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

有关其他html解析器,请参阅这个SO问题

自我插入:我刚刚发布了一个新的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。

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