如何使用 Java 有效地解析 HTML?

新手上路,请多包涵

我在我的工作中做了很多 HTML 解析。到目前为止,我一直在使用 HtmlUnit 无头浏览器进行解析和浏览器自动化。

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

我想使用轻型 HTML 解析器,因为在 HtmlUnit 中首先加载页面、获取源代码然后解析它需要花费很多时间。

我想知道哪个 HTML 解析器可以有效地解析 HTML。我需要

  1. 速度
  2. 通过“id”或“名称”或“标记类型”轻松定位任何 HtmlElement。

如果它不清理肮脏的 HTML 代码,对我来说就可以了。我不需要清理任何 HTML 源代码。我只需要一种最简单的方法来跨 HtmlElements 移动并从中收集数据。

原文由 Amit 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

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

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

原文由 Jonathan Hedley 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

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

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

原文由 tangens 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题