【问题标题】:How can I efficiently parse HTML with Java?如何使用 Java 有效地解析 HTML?
【发布时间】:2011-01-11 05:38:39
【问题描述】:

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

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

我想使用一个轻量级的 HTML 解析器,因为在 HtmlUnit 中首先加载一个页面,然后获取源代码然后解析它需要很长时间。

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

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

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

【问题讨论】:

  • 如果解析器从 Internet 下载 DTD 和/或 XSD,则速度可能会很慢。

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


【解决方案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。

这是一个新项目,欢迎提出任何改进意见!

【讨论】:

    【解决方案2】:

    目前我见过的最好的是HtmlCleaner

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

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

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

    【讨论】:

    • 您必须自己处理代理,然后使用 HtmlCleaner 来处理您的流。 => 不方便。 T__T
    • HTMLTidy 在这里不是更好的选择吗? html-tidy.org
    • Similar rules that the most of web browsers use - 这不是很有说服力
    【解决方案3】:

    【讨论】:

    • 我试过这个,发现它超级难用。很少的文档/支持。
    猜你喜欢
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 2011-12-29
    • 1970-01-01
    • 2014-02-17
    • 2021-08-21
    相关资源
    最近更新 更多