我编写了很多解析器。到目前为止,我一直使用HtmlUnit无头浏览器进行解析和浏览器自动化。
现在,我想将这两个任务分开。
由于我80%的工作只是解析,我想使用轻量级的HTML解析器,因为在HtmlUnit中花费大量时间首先加载页面,然后获取源代码然后解析它。
我想知道哪种HTML解析器是最好的。如果解析器接近HtmlUnit解析器,那就更好了。
编辑:
最好,我至少需要以下功能:
速度
易于通过其“ 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();
有关更多信息,请参见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
评论
您如何表示“最佳”?您的意思是速度,从当前实施过渡的便捷性,遵守W3C标准,还有其他我没想到的事情吗?您的问题意味着速度,但也意味着开发过渡时间。一些澄清可能会帮助其他人推荐更好的解析器,使其更适合您的需求。您的陈述“我编写了很多解析器”似乎与这个问题并不吻合。您的意思是“我需要大量使用html解析器吗?”
我认为这个问题足够具体,可以免除“非建设性”的关闭理由。
请投票重新打开此文件。这足够具体,不应关闭。
是的,有些参加SO的人与“最佳”问题的圣战作斗争。很烦人。投票答案清楚地表明了此问题的实用性。