哪个HTML Parser最好?

时间:2010-01-30 16:52:48

标签: java html parsing html-parsing web-scraping

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

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

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

我想知道哪种HTML解析器最好。如果它接近HtmlUnit解析器,解析器会更好。


修改

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

  1. 速度
  2. 轻松找到任何HtmlElement的“id”或“name”或“tag type”。
  3. 如果它不清除脏HTML代码,那对我来说没问题。我不需要清理任何HTML源代码。我只需要一种最简单的方法来移动HtmlElements并从中收集数据。

3 个答案:

答案 0 :(得分:381)

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

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

答案 1 :(得分:32)

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

  

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

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

对于其他html解析器,请参阅this SO question

答案 2 :(得分:9)