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

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

由于我80%的工作只是解析,我想使用轻量级的HTML解析器,因为在HtmlUnit中花费大量时间首先加载页面,然后获取源代码然后解析它。

我想知道哪种HTML解析器是最好的。如果解析器接近HtmlUnit解析器,那就更好了。


编辑:

最好,我至少需要以下功能:


速度
易于通过其“ id”或“ name”或“ tag type”定位任何HtmlElement。

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

评论

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

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

我认为这个问题足够具体,可以免除“非建设性”的关闭理由。

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

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

#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();


有关更多信息,请参见Selector javadoc。

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

评论


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

–威廉·皮特里(William Pietri)
2010-09-16 0:25

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

– jmort253
2011年5月14日下午4:04

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

–emeraldhieu
11年8月19日在11:14



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

– IndrekKõue
2011年8月19日在13:54

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

– Michael-O
13年5月24日在21:06

#2 楼

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


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

对于其他html解析器看到这个问题。

评论


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

–kidnan1991
16-10-4在2:40

HTMLTidy在这里不是更好的选择吗? html-tidy.org

–Troy Witthoeft
16-10-25在12:03



大多数网络浏览器都使用类似的规则-这不是很令人信服

– pguardiario
17年7月5日在3:30

#3 楼

我建议Validator.nu的解析器基于HTML5解析算法。它是从2010-05-03起在Mozilla中使用的解析器

评论


我尝试了一下,发现它很难使用。很少的文档/支持。

– Ryan Shillington
2014年1月3日,18:27