AngleSharp是面向.NET平台的网页解析库,以C#编写,能够解析基于尖括号的超文本,包括HTML、SVG、MathML以及不做校验的XML,并且可以解析CSS。它依据万维网联盟(W3C)的规范构建出一套可直接操作的文档对象模型(DOM),使开发者能用接近浏览器JavaScript的方式处理网页结构,还提供querySelector、querySelectorAll等标准查询接口与LINQ支持。该项目采用MIT许可证开源,由.NET基金会支持,是.NET生态中网页抓取、数据提取与HTML/CSS处理常用的基础组件之一。
定义
AngleSharp是.NET平台上的一个解析库,用来处理以尖括号标记的超文本格式,涵盖HTML、SVG、MathML,也支持不进行校验的XML解析。它不只解析标记,还把源码转换成一个可遍历、可修改的DOM对象树,并额外提供对CSS的解析能力。[1]
它面向公共语言运行时(CLR)提供W3C DOM的实现,全部代码以C#编写。库暴露的接口遵循DOM4规范,命名方式按.NET习惯做了调整。项目方称,其目标是在C#里完成JavaScript里能对DOM做的各种事情。[2]
原理
该库的解析器依照HTML 5.1规范实现,规范本身定义了出错时的处理方式和元素纠正规则,因此遇到结构不规范的网页源码也能给出与常青浏览器一致的DOM结果。解析完成后,可通过querySelector或querySelectorAll按CSS选择器在树中定位节点。[1]
使用上通常先建立配置与浏览上下文,再异步载入目标地址,然后对返回的文档执行选择查询。浏览上下文(BrowsingContext)的作用类似浏览器的标签页,可由.NET代码控制导航;文档的各类集合都支持LINQ语句,库还提供官方DOM中没有的元素集合扩展方法。[2][1]
在性能方面,项目方说明其处理速度接近浏览器,很大的页面也能在毫秒级完成处理,实现上会尽量减少内存分配并在内部复用元素对象,以避免多余的实例创建。[1]
发展历程
AngleSharp由Florian Rappl发起,是.NET基金会支持的开源项目,采用MIT许可证发布。早期版本的说明文档中已使用HTML 5.1规范作为解析依据,并把CSS选择器内置,作为与HtmlAgilityPack的差异点。[3]
0.6.0版发布了新的接口驱动API,加入CSS媒体查询解析、按RFC 3986改进的URL解析,并称HTML5解析器与CSS3解析器接近完成。0.7.0版引入基于回调的原生异步解析、资源加载接口、浏览上下文、事件模型,并随附一个基于Jint的示例JavaScript引擎。[3]
此后项目从0.9向0.10及1.x演进,接口命名从HTMLDocument一类改为IDocument、IHtmlElement等。分发目标也随运行时变化,从早期仅面向.NET Standard 2.0,扩展为同时面向netstandard2.0、net8.0与net10.0,在Windows上还构建net462与net472目标。[1]
应用
常见用途是解析HTML及其片段、解析CSS的选择器与声明,以及从零构造HTML,例如实现视图引擎。此外还可用于压缩CSS与HTML、查询文档元素、抓取信息、统计汇总和网络自动化。[1]
在.NET的网页抓取实践中,一种常见组合是用HttpClient取得页面源码,再交给AngleSharp解析。由于其直接接受CSS选择器,从浏览器开发者工具中复制的选择器通常无需改写成XPath即可使用,这是相较于以XPath为主的HtmlAgilityPack的一项便利之处。[4]
该库也用于HTML与DOM单元测试、与JavaScript的自动化交互,以及测试脚本引擎等其他概念。围绕核心库还有若干扩展项目,分别提供CSS解析、JavaScript集成、WebAssembly支持、XML与XHTML解析、渲染、DOM差异比较和XPath支持等功能。[1][5]
局限
项目方在文档中说明,DOM的大部分内容已实现,但仍有部分可能尚未达到规范要求或实现不完整;1.0版本的目标是把所有实际相关的部分按W3C规范实现。这说明在相当长的时间里,库对规范覆盖度是渐进补全的。[6]
与真正的浏览器相比,该库本身并不执行页面脚本。JavaScript交互需要通过额外的集成项目或外部脚本引擎完成,官方主仓库中随附的JavaScript引擎也仅作为示例存在。[1]
在抓取场景中,它适合处理服务端渲染、且未对访问者做限制的页面。内容需要脚本执行后才出现,或站点对外部HTTP客户端作出限制时,仅靠HTTP客户端加解析库的路径无法应对,需要改用浏览器自动化等其他方式。[4]
当接口返回的是JSON外壳、标记文本被包在字段里时,直接把它交给解析器不会报错,但选择器会匹配不到任何元素。使用这类数据前需要先从JSON中取出标记内容,否则容易得到空结果而不自知。[4]
参见
参考资料
- AngleSharp [引用日期2026-10-14]
- AngleSharp 1.2.0-beta.418 [引用日期2026-10-14]
- README [引用日期2026-10-14]
- C# Web Scraping: HttpClient, AngleSharp and PuppeteerSharp [引用日期2026-10-14]
- AngleSharp [引用日期2026-10-14]
- AngleSharp 1.3.0 [引用日期2026-10-14]