Html Agility Pack是否仍然是最好的.NET HTMLparsing器?
Html Agility Pack是前段时间给出的一个StackOverflow问题的答案,它仍然是最好的select? 还有什么其他的select应该考虑? 有更轻量级的东西吗?
有一个比较电子表格 。
综上所述:
CsQuery性能对比Html敏捷性包和Fizzler我把一些性能testing放在一起比较CsQuery到我所知道的唯一的实际替代(Fizzler,一个HtmlAgilityPack扩展)。 我testing了三个不同的文件:
- 嘶嘶声testing文件(约11 k)
- 维基百科条目“奶酪”(约170 k)
- 单页HTML 5规范(大约6兆字节)
总体结果是:
- 在将HTMLstring加载到对象模型中时,HAP速度更快。 这是有道理的,因为我不认为Fizzlerbuild立一个索引(或者它可能只是build立一个相对简单的索引)。 CsQuery的加载时间从1.1到2.6x的时间更长。 更多关于这个下面。
- CsQuery在其他方面速度更快。 有时候会有一万或更多的因素。 一个例外是“*”select器,有时Fizzler更快。 对于所有的testing,结果都是完全枚举的。 这种情况只会导致树中的每个节点被枚举。 所以这不像数据结构那样testingselect引擎。
- CsQuery在返回与浏览器相同的结果方面做得更好。 这里的每个select器都使用jQuery 1.7.2在Chrome中的相同文档中进行了validation,并且这些数字与CsQuery返回的数字相匹配。 这可能是因为HtmlAgilityPack以不同方式处理可选(缺失)标签。 另外,nth-child并没有在Fizzler中完全实现 – 它只支持简单的值(不是公式)。
当谈到HTMLparsing,没有比较真实的东西。 这是validator.nuparsing器的C#端口 。 这是基于Gecko的浏览器(例如Firefox)所使用的相同的代码库。 有回购看起来有点尘土飞扬,但不要被愚弄..港口是优秀的。 这只是被忽视。 大约一个月前我把它集成到了CsQuery中 。 它通过了所有的CsQuerytesting(包括大部分jQuery和Sizzletesting移植到C#)。
我不知道用C#编写的任何其他HTML5parsing器,甚至没有任何远程工作可以完成丢失,可选和无效的标记处理。 这不仅仅是一个很好的工作 – 它符合标准。
我链接到上面的回购是原来的端口,它包括一个基本的包装,产生一个XML节点树。 CsQuery版本1.3及更高版本使用此parsing器。
Html Agility Pack是前段时间给出的StackOverflow问题的答案
Html Agility Pack仍然是parsingHTML的出色解决scheme。
它仍然是最好的select?
最好? 这一切都取决于手头的任务,但我一般认为是这样。 在某些情况下,这种情况并不理想,但一般情况下它会做得很好。
有更轻量级的东西吗?
你可以试试这个: http : //csharptest.net/browse/src/Library/Html/这只不过是通过正则expression式分解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); }
或者,您可以直接使用parsing器而不是构buildDOM树。 只需实现IXmlLightReader接口,并调用静态的XmlLightParser.Parse方法。
PS:这是写在解决一个内部的辩论:正则expression式可以parsingHTML! 从那以后,我们实际上已经发现了很多用途,因为它足够轻巧,可以embedded到任何地方。 仍然有办法混淆DOM构build器,但是我还没有发现parsing器不能处理的任何HTML。
还有AngleSharp
AngleSharp是一个.NET库,使您能够parsing基于angular度的超文本,如HTML,SVG和MathML。 没有validation的XML也被库支持。 AngleSharp的一个重要方面是CSS也可以被parsing。 parsing器是build立在官方的W3C规范之上的。 这产生了给定源代码的完全可移植的HTML5 DOM表示。 目前的function,如querySelector或querySelectorAll工作树遍历。
我以前用过这个,非常容易stream动的api。 我想在C#/ .net域中,这是一个很好的select。
这里有一个Java库。 即使我没有亲身经历,看起来相当不错。
最好是一个非常相对的术语,对于你的问题,我想你正在寻找一个可靠的工具,所以我认为这个function应该被考虑到。 我会寻找提供该工具的公司的支持和实力。 当您尝试联系支持任何使用的工具时,这是一种可怕的感觉,答案是,该公司不再存在。 由于HAP由开发者社区维护,我宁愿相信她。
如果您准备在.NET
世界以外寻找,那么Python
SO社区会推荐Beautiful Soup ,例如html-parser-in-python 。
美丽的汤是一个Python的HTML / XML分析器devise的快速周转项目,如屏幕抓取。
- 有没有好的免费.Netnetworking库? (FTP,SFTP,SSH等)
- 你可以调用Directory.GetFiles()与多个filter?
- 我可以在单个解决scheme中共享DNX / ASP.NET 5项目(project.json / xproj)和其他C#项目(csproj)之间的代码吗?
- 无法加载文件或程序集或其依赖项之一。 访问被拒绝。 这个问题是随机的,但一旦发生,就会继续
- 如何validation该方法是不是在Moq中调用?
- Environment.TickCount vs DateTime.Now
- 使用XML在app.config中包含或configuration引用来包含其他configuration文件的设置
- 尝试/最终在C#中的开销?
- 如何获得unit testing在x64平台上运行