提问人:Amit 提问时间:1/31/2010 最后编辑:MachavityAmit 更新时间:12/8/2021 访问量:211459
如何使用 Java 有效地解析 HTML?
How can I efficiently parse HTML with Java?
问:
我在工作中做了很多 HTML 解析。到目前为止,我一直在使用 HtmlUnit 无头浏览器进行解析和浏览器自动化。
现在,我想将这两个任务分开。
我想使用一个轻量级的 HTML 解析器,因为在 HtmlUnit 中首先加载页面,然后获取源代码,然后解析它需要很多时间。
我想知道哪个 HTML 解析器可以有效地解析 HTML。我需要
- 速度
- 轻松通过其“id”或“name”或“tag type”找到任何HtmlElement。
如果它不清理肮脏的 HTML 代码,对我来说没关系。我不需要清理任何 HTML 源代码。我只需要一种最简单的方法来在 HtmlElements 之间移动并从中收集数据。
答:
到目前为止,我见过的最好的是 HtmlCleaner:
HtmlCleaner 是用 Java 编写的开源 HTML 解析器。在 Web 上找到的 HTML 通常是脏的、格式不正确的,不适合进一步处理。对于此类文档的任何严重消费,有必要首先清理烂摊子,并将订单带到标签、属性和普通文本中。对于给定的 HTML 文档,HtmlCleaner 对单个元素进行重新排序并生成格式正确的 XML。默认情况下,它遵循大多数 Web 浏览器用于创建文档对象模型的类似规则。但是,用户可以提供自定义标签和规则集,用于标签过滤和平衡。
使用 HtmlCleaner,您可以使用 XPath 找到任何元素。
对于其他 html 解析器,请参阅此 SO 问题。
评论
Similar rules that the most of web browsers use
- 这不是很有说服力
我建议使用 Validator.nu 的解析器,它基于 HTML5 解析算法。它是 2010-05-03 在 Mozilla 中使用的解析器
评论
自插:我刚刚发布了一个新的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。
这是一个新项目,因此非常欢迎任何改进的想法!
评论