【问题标题】:What is the fastest way to remove html tags from a document in java?从java中的文档中删除html标签的最快方法是什么?
【发布时间】:2012-02-01 09:44:43
【问题描述】:

我有一堆网络文档,想从中删除 html 标签。我在 StackOverflow 上看到了一些关于如何在 java 中执行的帖子,从 regex 到 HtmlCleaner 和 Jsoup。

我有兴趣找到最快的方法。我有数百万份文档,所以性能对我来说至关重要。我什至可以用一些质量来换取性能。

提前感谢您的任何回答。

【问题讨论】:

  • 你必须测量它
  • 谢谢,我知道。我想知道是否有人以前这样做过并且可以分享结果。
  • 您究竟需要什么。这只是屏幕抓取吗?
  • @frankmoss:“我在 StackOverflow 上看到了一些关于如何在 Java 中执行此操作的帖子,从正则表达式到...” 我认为这不是这个答案有 4435 个赞(当我输入这个时):stackoverflow.com/questions/1732348/… :)
  • 如果您的 Html 是严格的或 XHTML。使用XSLT,这里有一种-[xhtml和XSLT][1]相关的[1]:stackoverflow.com/questions/1639625/…

标签: java html-parsing jsoup html htmlcleaner


【解决方案1】:

我的意见是尽可能多地使用流/SAX 处理: 1)因为它使用更少的内存 2)速度很快 3)可以更容易并行化(低内存消耗的结果)

您拥有数百万个文档的用例需要这些因素(来自我的观点)。 请看Wikipedia SAX

因此,如果您的 Html 是严格的或 XHTML。使用 XSLT,这里是关于如何使用 SAX XSLT+SAX+Java 转换 XML (XHTML) 的教程。

最后,如果您没有 XML 有效的 HTML,请查看使用流(和 PushBackReader)的 Java: Replace Strings in Streams, Arrays, Files etc.

HTH

【讨论】:

  • 我正在处理 Web 文档,也就是说,它不是格式良好的 XML。使用 Tidy 或类似的东西会引入开销。感谢您的链接(PushBackReader),将检查出来。
  • 让我知道它是否有帮助......或者即使您需要这种方式的进一步帮助
【解决方案2】:

1) 如果 html 是正确的 xml,那么您可以创建其文档对象并删除节点。

2) 如果不是正确的 xml,则将整个 html 读取为字符串 & 并使用替换功能删除 "html" sunbstring。

如果 HTMl 不是正确的 xml,那么正则表达式是替换字符串的最快方法。

【讨论】:

  • 1) document 的问题是它们都必须在内存中加载和解析,所以它会占用很大的空间,而且如果 html 很大,你可以到达 heap问题。 2) 正则表达式已被@user988052 宣传为无关紧要,请关注问题链接
  • @andy petrella:- 这就是我所传达的。如果 html 是正确的 xml,则可以使用 sax/dom 解析来删除节点。可以使用字符串的替换功能,并且可以将替换字符串指定为正则表达式
  • @DS28 我正在处理 Web 文档。所以忘记正确的xml。我担心最好的方法是正则表达式,但似乎我必须要么使用它,要么使用 jsoup。
  • @frankmoss:- 如果 html 不正确,那么您可以直接使用 Java String 类。 HTML 开始标签将始终出现在开始处,而 HTML 结束标签将出现在文档的末尾。因此,您无需搜索整个文档,只需从顶部搜索第一次出现并从底部搜索第一次出现并替换它。这样可以避免在整个文档中搜索 html 标记。
  • @frankmoss:- 如果 html 标签是指标准 html 标签,那么您也可以使用替换功能,它可以将正则表达式作为输入,并根据正则表达式删除所有字符串。很多api轮流使用这个函数。但是使搜索更快的是正确的 xml 是一个表单树结构。所以很明显,使用树结构而不是线性搜索,搜索和替换会更快。希望你明白我的意思。
【解决方案3】:

似乎 java regexp 是最快的解决方案。但是,它会降低之后获得的文本的质量。

【讨论】:

猜你喜欢
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 2023-01-11
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
相关资源
最近更新 更多