哪种HTML解析器是最好的?[关闭]


194

我编写了很多解析器。到目前为止,我一直使用HtmlUnit无头浏览器进行解析和浏览器自动化。

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

由于我80%的工作仅涉及解析,因此我想使用一个简单的HTML解析器,因为在HtmlUnit中花很多时间才能首先加载页面,然后获取源然后解析它。

我想知道哪个HTML解析器是最好的。如果解析器与HtmlUnit解析器接近,则解析器会更好。


编辑:

最好的情况是,我至少需要以下功能:

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

如果不清除脏HTML代码,对我来说可以。我不需要清理任何HTML源。我只需要一种最简单的方法即可在HtmlElements之间移动并从中获取数据。


2
您如何表示“最佳”?您的意思是速度,从当前实施过渡的便利性,遵守W3C标准,还有其他我没想到的事情吗?您的问题意味着速度,但也意味着开发过渡时间。一些澄清可能会帮助其他人推荐更好的解析器,使其更适合您的需求。
aperkins 2010年

2
您的陈述“我编写了很多解析器”似乎与这个问题并不吻合。您的意思是“我需要大量使用HTML解析器吗?”
空白:

11
我认为这个问题足够具体,可以免除“非建设性”的封闭理由。
比尔蜥蜴

9
请投票重新打开此文件。这足够具体,不应关闭。
AZ_

3
是的,有些参加SO的人与“最佳”问题的圣战作斗争。很烦人。投票答案清楚地表明了这个问题的有用性。
user1050755 '19

Answers:


396

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

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


15
这件事太棒了,我喜欢CSS选择器支持。我几乎不知道我在使用Java库。:-)
William Pietri'9

17
请不要停止支持。这正是我们使用服务器端Java解析HTML所需要的!这太棒了!我仅用了几个小时就构建了一个代理,该代理修改了所有src和href链接,以使其成为原始服务器的完整路径。
jmort253

7
我刚刚看了一下。我喜欢它的界面和文档。很容易理解。:)
emeraldhieu

5
不错的工作!在不到10分钟的时间内即可启动jsoup并运行它。
2011年

10
太不可思议了,这太恶心了。我能够在几分钟内处理HTML页面。非常感谢您的出色工作。
Michael-O

32

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

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

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

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


1
您必须自己处理代理,然后使用HtmlCleaner处理流。=>这不方便。T__T
kidnan1991 '16

HTMLTidy在这里不是更好的选择吗? html-tidy.org
Troy Witthoeft,2016年

1
Similar rules that the most of web browsers use-这不是很有说服力
pguardiario

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.