Html 敏捷包 被给出作为答案 StackOverflow问题 前段时间,它仍然是最好的选择吗?还应考虑哪些其他选择?有没有更轻量的东西?

有帮助吗?

解决方案

有一个 电子表格 与比较。

总之:

CsQuery 性能对比HTML敏捷包和Fizzler,我整理了一些性能测试,以将Csquery与我所知道的唯一实用替代方案进行比较(Fizzler,HTMLagilityPack扩展名)。我对三个不同的文档进行了测试:

  • 嘶嘶声测试文件(约11k)
  • “奶酪”的维基百科条目(约 170 k)
  • 单页 HTML 5 规范(约 6 MB)

总体结果是:

  • HAP 将 HTML 字符串加载到对象模型中的速度更快。这是有道理的,因为我认为Fizzler不会构建索引(或者它仅构建一个相对简单的索引)。Csquery的时间为1.1至2.6倍,以加载文档。以下更多内容。
  • CsQuery 对于几乎所有其他事情来说都更快。有时高达 10,000 倍或更多。一个例外是“*”选择器,有时Fizzler更快。对于所有测试,结果都是完全列举的。这种情况只会导致列出树中的每个节点。因此,这不会像数据结构那样测试选择引擎。
  • CsQuery 在返回与浏览器相同的结果方面做得更好。使用jQuery 1.7.2在Chrome中使用同一文档验证了此处的每个选择器,并且数字与Csquery返回的数字相匹配。这可能是因为HTMLagilityPack处理可选(缺少)标签的方式不同。此外,第n -Child并未在Fizzler中完全实现 - 它仅支持简单的值(不是公式)。

其他提示

当涉及到HTML解析,没有比较真实的东西。这是validator.nu 解析器的 C#端口。这是通过基于Gecko的浏览器(例如火狐)中使用的相同的代码库。有回购看起来有点尘土飞扬,但不要被愚弄..端口为突出。这只是被忽视了。我将它纳入 CsQuery 大约一个月前。它通过了所有测试CsQuery(其包括大多数的jQuery和灒测试移植到C#)。

我不知道C#编写的任何其他HTML5分析器,甚至任何接近的缺失,可选的,无效的标记处理方面做得不好来进行远程的。这不只是做大量的工作,虽然 - 这是符合标准的。

我上方连结回购是原来的端口,它包括产生XML节点树基本包装。 CsQuery版本1.3和更高的使用这种解析器。

还有 AngleSharp

  

AngleSharp是一个NET库,让你解析角钢支架的基于超文本如HTML,SVG和MathML的能力。 XML未经验证也由库支持。 AngleSharp的一个重要方面是,CSS也可以被解析。解析器是在官方W3C规范建造。这会产生给定的源代码的一个完全便携式HTML5 DOM表示。也电流的功能,如querySelector或querySelectorAll工作了树的遍历。

  

HTML敏捷性包被给出的答案,StackOverflow的问题,前一段时间

在HTML敏捷性包仍然是解析HTML杰出的溶液。

  

是它仍然在最好的选项?

最佳?清楚,一切都取决于手头的任务,但一般来说,我是这么认为的。有些时候它确实达不到的是理想的,但一般会做大量的工作。

  

有更多的东西轻量级?

您可以试试这个: http://csharptest.net/browse/src/Library/ HTML / 这无非手满是挑除了通过正则表达式的HTML / XML的源文件。它支持一个轻量级的DOM和XPath,但仅此而已。 (帮助内容

[实施例]

public void TestParse() {
        string notxml = "<html id=a ><body foo='bar' bar=\"foo\" />";
        var html = new HtmlLightDocument(notxml).Root;

        Assert.AreEqual("html", html.TagName);
        Assert.AreEqual(1, html.Attributes.Count);
        Assert.AreEqual("a", html.Attributes["id"]);
        Assert.AreEqual(1, html.Children.Count);
}

可替换地可以使用解析器,而不是直接构建DOM树。只需实现 IXmlLightReader 接口,并调用静态的 XmlLightParser.Parse 方法。

PS:这是写来解决一个内部的争论:该正则表达式的可以的解析HTML!从那以后,我们居然发现它的许多用途,因为它是重量足够轻的任何地方嵌入。还是有办法来迷惑DOM层次结构的建设者,但我还没有发现任何HTML解析器不会处理。

我以前使用这一点,很容易流API。我认为,在C#/。NET域名,这是一个非常不错的选择。

有是一个Java库此处。看起来很不错,即使我没有亲身经历。

最好的是一个非常相对的概念,对于你的问题,我想你正在寻找一个可靠的工具,所以我觉得这个功能应该被考虑在内。 我想寻找一个能提供工具的公司的支持和力量。 这是一种可怕的感觉,当你尝试联系使用,答案是任何工具的支持,这个公司已经不存在。 由于HAP是由开发者社区维持,我宁愿相信她。

如果你愿意的.NET外面的世界看看, 在Python SO社区建议美丽的汤, 例如 HTML解析器合蟒

  

美丽的汤是一个Python HTML / XML解析器设计用于快速周转项目如屏幕抓取。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top