AngleSharp是一个.NET库,它使您能够基于HTML,SVG和MathML等基于角度支架的超文本。库也支持没有验证的XML。 Anglesharp的一个重要方面是CSS也可以解析。随附的解析器建立在官方的W3C规格上。这会产生给定源代码的完美便携式HTML5 DOM表示形式,并确保与常绿浏览器的结果兼容。还有标准的DOM功能,例如querySelector或querySelectorAll工作,用于树遍历。
⚡⚡从Anglesharp迁移0.9到Anglesharp 0.10或更高版本(包括1.0)?查看我们的迁移文档。 ⚡⚡
BrowsingContext就像一个浏览器选项卡 - 从.NET控制!)。与HTMLagilityPack这样的类似库的优势是,暴露的DOM使用官方的W3C指定的API,即,即使是querySelectorAll之类的东西也可以在Anglesharp中使用。同样,解析器使用HTML 5.1规范,该规范定义了错误处理和元素校正。 Anglesharp库侧重于标准符合性,互动性和可扩展性。因此,它使Web开发人员从任何现代浏览器中使用DOM所知道的所有可能性都可以使用C#。
Anglesharp的性能非常接近浏览器的性能。即使是非常大的页面也可以在毫秒内处理。 Anglesharp试图最大程度地减少内部内部记忆分配和重用元素,以避免不必要的对象创建。
这个简单的示例将使用Wikipedia的网站进行数据检索。
var config = Configuration . Default . WithDefaultLoader ( ) ;
var address = "https://en.wikipedia.org/wiki/List_of_The_Big_Bang_Theory_episodes" ;
var context = BrowsingContext . New ( config ) ;
var document = await context . OpenAsync ( address ) ;
var cellSelector = "tr.vevent td:nth-child(3)" ;
var cells = document . QuerySelectorAll ( cellSelector ) ;
var titles = cells . Select ( m => m . TextContent ) ;或与明确类型相同的相同:
IConfiguration config = Configuration . Default . WithDefaultLoader ( ) ;
string address = "https://en.wikipedia.org/wiki/List_of_The_Big_Bang_Theory_episodes" ;
IBrowsingContext context = BrowsingContext . New ( config ) ;
IDocument document = await context . OpenAsync ( address ) ;
string cellSelector = "tr.vevent td:nth-child(3)" ;
IHtmlCollection < IElement > cells = document . QuerySelectorAll ( cellSelector ) ;
IEnumerable < string > titles = cells . Select ( m => m . TextContent ) ;在示例中,我们看到:
Anglesharp的每个集合都支持LINQ语句。 Anglesharp还为元素收集提供了许多有用的扩展方法,这些方法在官方DOM中找不到。
Anglesharp已被创建为.NET标准2.0兼容库。这包括但不限于:
AngleSharp的文档位于DOCS文件夹中。可以在那里找到更多示例,最佳实践和一般信息。该文档还包含常见问题的列表。
通过遵循Wiki中提到的一些超级参考,还可以提供更多信息。深入的文章将在CodeProject上发表,并在Github的Wiki中放置链接。
该项目旨在将HTML,SVG,MATHML和CSS的W3C DOM的可靠实施到CLR中 - 全部用C#编写。这个想法是,您基本上可以使用C#中的DOM进行所有操作,您可以在JavaScript(当然还有更多)。
即使有些人仍然会错过其(完全指定 /正确的)实现,即使其中大多数部分都包括在内。 V1.0的目标是根据官方的W3C规范(Whatwg的有用扩展)实现所有实际相关零件。
API接近DOM4规范,但是,已调整命名以使用.NET约定。但是,要使AngleSharp对JavaScript引擎的属性确实有用,请将属性放置在相应的接口(以及方法,属性等)上,以指示官方规范中的字段状态。这允许使用官方API自动生成DOM对象。
这是一个长期的项目,最终将导致最重要的基于角度括号的超文本的最先进的解析器。
我们的希望是通过该项目围绕网络解析和图书馆建立一个社区。到目前为止,我们做出了巨大的贡献,但是该目标尚未完全实现。想帮助吗?与我们联系!
如果您知道Anglesharp当前缺少的某些功能,并且您愿意实施该功能,那么您的贡献就非常欢迎!另外,如果您有一个很酷的主意 - 请不要害羞,我们想听听。
如果您有一个想法如何改进API(或缺少的内容),则也欢迎帖子 /消息。例如,过去关于某些样式(例如, HTMLDocument或HtmlDocument )一直在进行讨论。最后,Anglesharp停止使用HTMLDocument (至少在库外面可见)。现在,Anglesharp使用IDocument , IHtmlElement等名称。没有如此富有成效的讨论,这种变化将是不可能的。
该项目总是在寻找其他贡献者。即使您没有任何代码可以做出贡献,而是改进的想法,错误报告或文档中的错误。这些是使该项目保持活跃的贡献。
实时讨论可以在我们的吉特聊天中进行,该聊天支持使用GitHub帐户。
在贡献指南中可以找到更多信息。所有贡献者都可以在贡献者文件中找到。
该项目还采用了撰稿人盟约定义的行为准则,以阐明我们社区中的预期行为。
有关更多信息,请参见.NET基金会行为守则。
如果您经常使用Anglesharp,但是您没有时间通过积极参与来支持该项目,那么您仍然有兴趣确保Anglesharp项目保持灯光。
因此,我们通过BountySource创建了一个背景模型。欢迎任何捐款,并受到非常感谢。我们将主要花钱在需要改进需要改进的近似值的专用开发时间上,并投资于.NET的Web Utility Eco-System(例如,在JavaScript引擎,其他解析器或Anglesharp的渲染器中,以提及一些出色的项目)。
请访问Bountysource以获取更多详细信息。
Anglesharp以C#的最新版本编写,因此需要Roslyn作为编译器。建议在Windows上使用IDE(例如Visual Studio 2019+)。另外,VSCODE(具有全曲线或其他合适的语言服务器协议实现)应该是其他平台上的选择工具。
该代码试图尽可能清洁。值得注意的是使用以下规则:
-Async后缀方法但是,更重要的是正确使用测试。任何新功能都应进行一组测试,以涵盖功能并防止回归。
存在一个非常详细的更改。如果您只是对主要版本感兴趣,请查看GitHub版本。
该项目得到了.NET基金会的支持。
Anglesharp使用MIT许可证发布。有关更多信息,请参见许可证文件。