Java的HTML/XML解析器

32

哪些HTML解析器具有以下功能:

  • 快速
  • 线程安全
  • 可靠且无错误
  • 解析HTML和XML
  • 处理错误的HTML
  • 具有DOM实现
  • 支持HTML4、JavaScript和CSS标签
  • 相对简单的面向对象API

您认为哪个解析器更好?

谢谢。


2
“支持HTML4、JavaScript和CSS”是什么意思?解析器只是一个解析器,它不会解释您的页面。如果您想模拟浏览器,请重新表达您的问题。 - Valentin Rocher
不是所有的解析器都能理解CSS之类的东西。这就是我的意思。 - Shayan
1
如果CSS在<style>标签中,它将被解释为文本。 - Valentin Rocher
7个回答

16

请查看Web Harvest。它既是一个可供使用的库,也是一个数据提取工具。听起来这正是你想要做的。你可以创建XML脚本文件来指示抓取器从哪里以及如何提取所需信息。提供的GUI非常有用,能够快速测试脚本。

请查看项目示例页面,看看它是否适合你所要做的事情。


2
如果您想要进行网页抓取,那么Web Harvest是值得推荐的工具。+1 推荐。 - jckdnk111

7
最知名的是NekoHTMLJTidy
NekoHTML基于Xerces,提供了一个简单适应的SAXParser,实现了XMLReader JavaSE接口。
JTidy更倾向于将您的HTML代码格式化为符合XML规范,但仍然非常有用作为XML解析器,如果需要,可以生成DOM树。
您可以查看this list以获取其他选择。
另一个选择是通过jRuby使用hpricot

为什么?它们具有哪些特性? - Shayan
SAX 不是我想要的,而 JTidy 的主要目的是清理 XML。你确定它比其他工具更适合我想要的吗? - Shayan
你到底想要什么? - Valentin Rocher
它应该基于DOM。我希望提取是它的主要工作,而不是转换。 - Shayan
只要它能够做你想要的事情,那么它的“主要”工作并不重要。 - Anon.

6

Validator.nu的HTML解析器绝对是首选。这是一个HTML5解析算法的实现,Gecko正在使用这个C++版本替换自己的HTML解析器。


5

Apache Tika 是最佳选择。Apache 最近从现有项目中提取了许多子项目并将它们公开。Tika 是其中之一,曾经是 Apache Lucene 的一个组件。由于 Apache 的支持和声誉以及广泛使用的父项目 Lucene,它必定是一个非常好的选择。此外,它是开源的。

来自 Apache Tika 网站的简要介绍:

Apache Tika™ 工具包使用现有的解析器库检测和提取各种文档的元数据和结构化文本内容。

支持的格式有:

HyperText Markup Language
XML and derived formats
Microsoft Office document formats
OpenDocument Format
Portable Document Format
Electronic Publication Format
Rich Text Format
Compression and packaging formats
Text formats
Audio formats
Image formats
Video formats
Java class files and archives
The mbox format

1
Apache Tika是一个很好的建议。即使您不感兴趣阅读XML/HTML/MS DOC格式,您也可以只指定“text/plain”。它将流式传输数据,因此无需预先加载整个文件。好处列表:http://tika.apache.org/1.4/parser.html 带有示例代码的文章:http://www.openlogic.com/wazi/bid/314389/Content-mining-with-Apache-Tika - Salvador Valencia
1
我来寻找一个可靠的HTML解析器,最终找到了一个无需花费时间进行泛化的解析器。我喜欢这个游戏。 - Inversus

1

1

我认为HTML Cleaner就是你要找的东西。在TheServerSide上看看它的公告,看看它与JTidy、TagSoup和NekoHtml相比如何。


但这也是为了转换成良好的XML格式。我的主要目标是从中提取数据。 - Shayan
@Shayan 那又怎样?它不允许你从中提取数据吗?它不提供DOM操作吗?它不允许解析糟糕的HTML吗?我不明白你的意思。 - Pascal Thivent

1

你可能想要尝试在无头模式下运行Mozilla。这里有一个链接可以帮助你入门,我相信你可以使用谷歌来获取更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接