AngleSharp

关注
义项:.NET 的 HTML 解析库
AngleSharp

AngleSharp是面向.NET平台的网页解析库,以C#编写,能够解析基于尖括号的超文本,包括HTML、SVG、MathML以及不做校验的XML,并且可以解析CSS。它依据万维网联盟(W3C)的规范构建出一套可直接操作的文档对象模型(DOM),使开发者能用接近浏览器JavaScript的方式处理网页结构,还提供querySelector、querySelectorAll等标准查询接口与LINQ支持。该项目采用MIT许可证开源,由.NET基金会支持,是.NET生态中网页抓取、数据提取与HTML/CSS处理常用的基础组件之一。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

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]

参见

  • HTML —— AngleSharp 处理的主要标记语言之一。

  • CSS —— 该库除标记外还可解析的样式语言。

  • 文档对象模型 —— 解析结果所构造并供查询的对象树结构。

  • 万维网联盟 —— 该库实现其 DOM 与 HTML 规范的标准化组织。

  • HtmlAgilityPack —— .NET 生态中另一款常被拿来比较的 HTML 解析库。

  • 网络爬虫 —— 该库的主要应用场景之一。

参考资料

  1. AngleSharp [引用日期2026-10-14]
  2. AngleSharp 1.2.0-beta.418 [引用日期2026-10-14]
  3. README [引用日期2026-10-14]
  4. C# Web Scraping: HttpClient, AngleSharp and PuppeteerSharp [引用日期2026-10-14]
  5. AngleSharp [引用日期2026-10-14]
  6. AngleSharp 1.3.0 [引用日期2026-10-14]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T20:30:48Z

历史版本

本条目引用的词条
HTML CSS 文档对象模型 万维网联盟 HtmlAgilityPack 网络爬虫