AngleSharp 1.2.0-beta.423

logo

AngleSharp

CI GitHub Tag NuGet Count Issues Open Gitter Chat StackOverflow Questions CLA Assistant

AngleSharp is a .NET library that gives you the ability to parse angle bracket based hyper-texts like HTML, SVG, and MathML. XML without validation is also supported by the library. An important aspect of AngleSharp is that CSS can also be parsed. The included parser is built upon the official W3C specification. This produces a perfectly portable HTML5 DOM representation of the given source code and ensures compatibility with results in evergreen browsers. Also standard DOM features such as querySelector or querySelectorAll work for tree traversal.

:zapzap: Migrating from AngleSharp 0.9 to AngleSharp 0.10 or later (incl. 1.0)? Look at our migration documentation. :zapzap:

Key Features

  • Portable (using .NET Standard 2.0)
  • Standards conform (works exactly as evergreen browsers)
  • Great performance (outperforms similar parsers in most scenarios)
  • Extensible (extend with your own services)
  • Useful abstractions (type helpers, jQuery like construction)
  • Fully functional DOM (all the lists, iterators, and events you know)
  • Form submission (easily log in everywhere)
  • Navigation (a BrowsingContext is like a browser tab - control it from .NET!).
  • LINQ enhanced (use LINQ with DOM elements, naturally without wrappers)

The advantage over similar libraries like HtmlAgilityPack is that the exposed DOM is using the official W3C specified API, i.e., that even things like querySelectorAll are available in AngleSharp. Also the parser uses the HTML 5.1 specification, which defines error handling and element correction. The AngleSharp library focuses on standards compliance, interactivity, and extensibility. It is therefore giving web developers working with C# all possibilities as they know from using the DOM in any modern browser.

The performance of AngleSharp is quite close to the performance of browsers. Even very large pages can be processed within milliseconds. AngleSharp tries to minimize memory allocations and reuses elements internally to avoid unnecessary object creation.

Simple Demo

The simple example will use the website of Wikipedia for data retrieval.

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);

Or the same with explicit types:

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);

In the example we see:

  • How to setup the configuration for supporting document loading
  • Asynchronously get the document in a new context using the configuration
  • Performing a query to get all cells with the content of interest
  • The whole DOM supports LINQ queries

Every collection in AngleSharp supports LINQ statements. AngleSharp also provides many useful extension methods for element collections that cannot be found in the official DOM.

Supported Platforms

AngleSharp has been created as a .NET Standard 2.0 compatible library. This includes, but is not limited to:

  • .NET Core (2.0 and later)
  • .NET Framework (4.6.2 and later)
  • Xamarin.Android (7.0 and 8.0)
  • Xamarin.iOS (10.0 and 10.14)
  • Xamarin.Mac (3.0 and 3.8)
  • Mono (4.6 and 5.4)
  • UWP (10.0 and 10.0.16299)
  • Unity (2018.1)

Documentation

The documentation of AngleSharp is located in the docs folder. More examples, best-practices, and general information can be found there. The documentation also contains a list of frequently asked questions.

More information is also available by following some of the hyper references mentioned in the Wiki. In-depth articles will be published on the CodeProject, with links being placed in the Wiki at GitHub.

Use-Cases

  • Parsing HTML (incl. fragments)
  • Parsing CSS (incl. selectors, declarations, ...)
  • Constructing HTML (e.g., view-engine)
  • Minifying CSS, HTML, ...
  • Querying document elements
  • Crawling information
  • Gathering statistics
  • Web automation
  • Tools with HTML / CSS / ... support
  • Connection to page analytics
  • HTML / DOM unit tests
  • Automated JavaScript interaction
  • Testing other concepts, e.g., script engines
  • ...

Vision

The project aims to bring a solid implementation of the W3C DOM for HTML, SVG, MathML, and CSS to the CLR - all written in C#. The idea is that you can basically do everything with the DOM in C# that you can do in JavaScript (plus, of course, more).

Most parts of the DOM are included, even though some may still miss their (fully specified / correct) implementation. The goal for v1.0 is to have all practically relevant parts implemented according to the official W3C specification (with useful extensions by the WHATWG).

The API is close to the DOM4 specification, however, the naming has been adjusted to apply with .NET conventions. Nevertheless, to make AngleSharp really useful for, e.g., a JavaScript engine, attributes have been placed on the corresponding interfaces (and methods, properties, ...) to indicate the status of the field in the official specification. This allows automatic generation of DOM objects with the official API.

This is a long-term project which will eventually result in a state of the art parser for the most important angle bracket based hyper-texts.

Our hope is to build a community around web parsing and libraries from this project. So far we had great contributions, but that goal was not fully achieved. Want to help? Get in touch with us!

Participating in the Project

If you know some feature that AngleSharp is currently missing, and you are willing to implement the feature, then your contribution is more than welcome! Also if you have a really cool idea - do not be shy, we'd like to hear it.

If you have an idea how to improve the API (or what is missing) then posts / messages are also welcome. For instance there have been ongoing discussions about some styles that have been used by AngleSharp (e.g., HTMLDocument or HtmlDocument) in the past. In the end AngleSharp stopped using HTMLDocument (at least visible outside of the library). Now AngleSharp uses names like IDocument, IHtmlElement and so on. This change would not have been possible without such fruitful discussions.

The project is always searching for additional contributors. Even if you do not have any code to contribute, but rather an idea for improvement, a bug report or a mistake in the documentation. These are the contributions that keep this project active.

Live discussions can take place in our Gitter chat, which supports using GitHub accounts.

More information is found in the contribution guidelines. All contributors can be found in the CONTRIBUTORS file.

This project has also adopted the code of conduct defined by the Contributor Covenant to clarify expected behavior in our community.

For more information see the .NET Foundation Code of Conduct.

Funding / Support

If you use AngleSharp frequently, but you do not have the time to support the project by active participation you may still be interested to ensure that the AngleSharp projects keeps the lights on.

Therefore we created a backing model via Bountysource. Any donation is welcome and much appreciated. We will mostly spend the money on dedicated development time to improve AngleSharp where it needs to be improved, plus invest in the web utility eco-system in .NET (e.g., in JavaScript engines, other parsers, or a renderer for AngleSharp to mention some outstanding projects).

Visit Bountysource for more details.

Development

AngleSharp is written in the most recent version of C# and thus requires Roslyn as a compiler. Using an IDE like Visual Studio 2019+ is recommended on Windows. Alternatively, VSCode (with OmniSharp or another suitable Language Server Protocol implementation) should be the tool of choice on other platforms.

The code tries to be as clean as possible. Notably the following rules are used:

  • Use braces for any conditional / loop body
  • Use the -Async suffixed methods when available
  • Use VIP ("Var If Possible") style (in C++ called AAA: Almost Always Auto) to place types on the right

More important, however, is the proper usage of tests. Any new feature should come with a set of tests to cover the functionality and prevent regression.

Changelog

A very detailed changelog exists. If you are just interested in major releases then have a look at the GitHub releases.

.NET Foundation

This project is supported by the .NET Foundation.

License

AngleSharp is released using the MIT license. For more information see the license file.

Showing the top 20 packages that depend on AngleSharp.

Packages Downloads
AngleSharp.Css
Extends the CSSOM from the core AngleSharp library.
38
AngleSharp.Css
Extends the CSSOM from the core AngleSharp library.
43
AngleSharp.Css
Extends the CSSOM from the core AngleSharp library.
152
HtmlSanitizer
Cleans HTML from constructs that can be used for cross site scripting (XSS)
40
HtmlSanitizer
Cleans HTML from constructs that can be used for cross site scripting (XSS)
50
HtmlSanitizer
Cleans HTML from constructs that can be used for cross site scripting (XSS)
59
HtmlSanitizer
Cleans HTML from constructs that can be used for cross site scripting (XSS)
94
HtmlSanitizer
Cleans HTML from constructs that can be used for cross site scripting (XSS)
106
HtmlSanitizer
Cleans HTML from constructs that can be used for cross-site scripting (XSS)
33
HtmlSanitizer
Cleans HTML from constructs that can be used for cross-site scripting (XSS)
34
HtmlSanitizer
Cleans HTML from constructs that can be used for cross-site scripting (XSS)
36
PnP.Core
The PnP Core SDK provides a development model that unites SharePoint REST and Microsoft Graph in a high performance, lightweight library. The SDK uses a model which under the covers is automatically translated to the needed SharePoint REST or Microsoft Graph queries.
34
PnP.Core
The PnP Core SDK provides a development model that unites SharePoint REST and Microsoft Graph in a high performance, lightweight library. The SDK uses a model which under the covers is automatically translated to the needed SharePoint REST or Microsoft Graph queries.
59
PnP.Framework
PnP Framework contains the PnP Provisioning engine and a ton of extension methods that will make you more productive while developing for Microsoft 365.
57
PommaLabs.Liquimail
Liquimail implements glue code to use Liquid templates with MailKit.
34
PommaLabs.Liquimail
Liquimail implements glue code to use Liquid templates with MailKit.
197
PommaLabs.Liquimail
Liquimail implements glue code to use Liquid templates with MailKit.
228
PommaLabs.Liquimail
Liquimail implements glue code to use Liquid templates with MailKit.
246
PommaLabs.Liquimail
Liquimail implements glue code to use Liquid templates with MailKit.
481

https://github.com/AngleSharp/AngleSharp/blob/main/CHANGELOG.md

.NET Standard 2.0

.NET Framework 4.6.2

.NET Framework 4.7.2

.NET 6.0

  • No dependencies.

.NET 7.0

  • No dependencies.

.NET 8.0

  • No dependencies.

Version Downloads Last updated
1.3.1-beta.490 2 07/17/2025
1.3.1-beta.486 10 05/28/2025
1.3.0 9 04/24/2025
1.3.0-beta.484 6 05/25/2025
1.3.0-beta.477 8 04/25/2025
1.3.0-beta.476 9 04/24/2025
1.3.0-beta.470 13 03/26/2025
1.3.0-beta.468 15 02/06/2025
1.3.0-beta.466 14 02/21/2025
1.2.0 13 02/21/2025
1.2.0-beta.457 11 02/21/2025
1.2.0-beta.456 13 02/24/2025
1.2.0-beta.449 12 02/21/2025
1.2.0-beta.448 14 02/20/2025
1.2.0-beta.439 19 10/06/2024
1.2.0-beta.431 20 07/29/2024
1.2.0-beta.423 17 04/15/2024
1.2.0-beta.420 18 04/14/2024
1.2.0-beta.419 16 04/14/2024
1.2.0-beta.418 19 04/14/2024
1.2.0-beta.410 23 04/15/2024
1.2.0-beta.408 14 04/15/2024
1.1.2 18 03/12/2024
1.1.2-beta.407 20 04/15/2024
1.1.2-beta.395 20 03/12/2024
1.1.1 38 03/12/2024
1.1.1-beta.392 20 03/12/2024
1.1.1-beta.390 20 03/12/2024
1.1.1-beta.389 16 03/12/2024
1.1.1-beta.388 21 03/12/2024
1.1.1-beta.387 16 03/12/2024
1.1.1-beta.386 19 03/12/2024
1.1.1-beta.385 24 03/12/2024
1.1.0 21 02/10/2024
1.1.0-beta.384 18 03/12/2024
1.1.0-alpha-379 22 02/10/2024
1.1.0-alpha-378 22 02/10/2024
1.1.0-alpha-377 23 02/10/2024
1.1.0-alpha-376 24 02/10/2024
1.1.0-alpha-375 23 02/10/2024
1.1.0-alpha-374 21 02/10/2024
1.0.7 21 02/10/2024
1.0.7-alpha-342 22 02/10/2024
1.0.6 22 02/10/2024
1.0.6-alpha-341 25 02/10/2024
1.0.6-alpha-339 19 02/10/2024
1.0.6-alpha-331 19 02/10/2024
1.0.6-alpha-330 24 02/10/2024
1.0.6-alpha-328 23 11/17/2023
1.0.6-alpha-325 23 11/16/2023
1.0.6-alpha-321 24 11/16/2023
1.0.5 26 11/16/2023
1.0.5-alpha-317 22 11/17/2023
1.0.4 21 02/10/2024
1.0.4-alpha-316 25 11/18/2023
1.0.4-alpha-314 25 11/18/2023
1.0.4-alpha-311 23 11/16/2023
1.0.4-alpha-307 24 11/16/2023
1.0.4-alpha-301 21 11/17/2023
1.0.4-alpha-300 27 02/10/2024
1.0.4-alpha-298 26 02/10/2024
1.0.4-alpha-290 21 11/17/2023
1.0.4-alpha-289 24 12/21/2023
1.0.3 24 11/18/2023
1.0.3-alpha-287 21 11/17/2023
1.0.2 21 02/10/2024
1.0.2-alpha-284 26 02/10/2024
1.0.2-alpha-283 19 02/10/2024
1.0.2-alpha-282 23 12/24/2023
1.0.2-alpha-281 20 11/18/2023
1.0.2-alpha-278 22 11/18/2023
1.0.2-alpha-277 21 02/10/2024
1.0.2-alpha-276 21 02/10/2024
1.0.2-alpha-275 25 02/10/2024
1.0.2-alpha-274 25 11/18/2023
1.0.2-alpha-273 25 02/10/2024
1.0.2-alpha-261 23 11/16/2023
1.0.2-alpha-258 21 11/16/2023
1.0.2-alpha-257 18 02/10/2024
1.0.2-alpha-255 20 11/18/2023
1.0.2-alpha-251 22 11/16/2023
1.0.2-alpha-250 19 02/10/2024
1.0.2-alpha-249 21 02/10/2024
1.0.1 19 11/18/2023
1.0.1-alpha-248 21 11/17/2023
1.0.1-alpha-243 21 02/10/2024
1.0.1-alpha-242 24 11/17/2023
1.0.1-alpha-241 21 02/10/2024
1.0.1-alpha-235 27 11/17/2023
1.0.0 20 02/10/2024
1.0.0-ci-228 21 11/17/2023
1.0.0-alpha-47 21 06/02/2022
1.0.0-alpha-231 23 02/10/2024
1.0.0-alpha-229 20 11/18/2023
0.17.1 33 11/23/2022
0.17.1-alpha-179 25 02/10/2024
0.17.1-alpha-178 20 02/10/2024
0.17.0 24 11/16/2023
0.17.0-alpha-177 20 11/17/2023
0.17.0-alpha-174 22 02/10/2024
0.17.0-alpha-173 19 11/16/2023
0.17.0-alpha-172 23 11/16/2023
0.17.0-alpha-171 21 02/10/2024
0.17.0-alpha-170 23 11/18/2023
0.17.0-alpha-169 22 11/17/2023
0.16.1 407 12/07/2021
0.16.1-alpha-99 22 02/10/2024
0.16.1-alpha-96 20 02/10/2024
0.16.1-alpha-91 21 02/10/2024
0.16.1-alpha-168 19 02/10/2024
0.16.1-alpha-167 19 02/10/2024
0.16.1-alpha-155 24 11/18/2023
0.16.1-alpha-153 19 02/10/2024
0.16.1-alpha-152 22 11/18/2023
0.16.1-alpha-148 21 11/16/2023
0.16.1-alpha-145 21 11/18/2023
0.16.1-alpha-144 21 02/10/2024
0.16.1-alpha-133 20 02/10/2024
0.16.1-alpha-127 24 01/23/2024
0.16.1-alpha-125 22 11/18/2023
0.16.1-alpha-120 20 11/17/2023
0.16.1-alpha-114 27 02/16/2023
0.16.1-alpha-112 22 11/17/2023
0.16.1-alpha-110 25 02/10/2024
0.16.1-alpha-108 24 11/16/2023
0.16.1-alpha-106 17 02/10/2024
0.16.1-alpha-104 21 11/18/2023
0.16.0 258 06/12/2021
0.16.0-alpha-86 26 11/18/2023
0.16.0-alpha-85 22 02/10/2024
0.16.0-alpha-84 20 02/10/2024
0.16.0-alpha-80 22 02/10/2024
0.16.0-alpha-79 19 02/10/2024
0.16.0-alpha-78 46 11/17/2023
0.16.0-alpha-77 19 02/10/2024
0.16.0-alpha-76 25 02/10/2024
0.16.0-alpha-75 21 02/10/2024
0.16.0-alpha-72 22 11/18/2023
0.15.0 28 04/22/2021
0.15.0-alpha-14 25 11/18/2023
0.14.0 675 09/14/2020
0.14.0-alpha-818 25 02/10/2024
0.14.0-alpha-817 23 11/17/2023
0.14.0-alpha-813 23 11/18/2023
0.14.0-alpha-811 26 02/01/2024
0.14.0-alpha-809 20 11/17/2023
0.14.0-alpha-805 19 11/17/2023
0.14.0-alpha-803 19 02/10/2024
0.14.0-alpha-802 20 02/10/2024
0.14.0-alpha-801 24 11/18/2023
0.14.0-alpha-798 23 02/10/2024
0.14.0-alpha-796 23 01/11/2024
0.14.0-alpha-794 22 11/17/2023
0.14.0-alpha-793 18 11/16/2023
0.14.0-alpha-790 21 11/17/2023
0.14.0-alpha-789 23 11/17/2023
0.14.0-alpha-788 21 11/18/2023
0.14.0-alpha-787 31 02/10/2024
0.14.0-alpha-784 23 12/30/2022
0.14.0-alpha-783 23 11/18/2023
0.13.0 22 03/15/2020
0.13.0-alpha-782 18 02/10/2024
0.13.0-alpha-775 22 02/10/2024
0.13.0-alpha-771 20 11/17/2023
0.13.0-alpha-768 24 02/10/2024
0.13.0-alpha-766 22 02/10/2024
0.13.0-alpha-764 21 02/10/2024
0.13.0-alpha-763 19 02/10/2024
0.13.0-alpha-760 23 02/10/2024
0.13.0-alpha-758 23 11/17/2023
0.13.0-alpha-756 19 11/17/2023
0.13.0-alpha-754 20 11/18/2023
0.13.0-alpha-748 24 02/10/2024
0.13.0-alpha-745 22 11/17/2023
0.13.0-alpha-744 19 11/18/2023
0.13.0-alpha-743 27 09/03/2023
0.13.0-alpha-742 25 02/10/2024
0.13.0-alpha-739 20 02/10/2024
0.13.0-alpha-737 20 02/10/2024
0.13.0-alpha-735 19 02/10/2024
0.13.0-alpha-734 20 02/10/2024
0.13.0-alpha-733 24 11/16/2023
0.12.1 20 11/16/2023
0.12.0 21 02/10/2024
0.11.0 21 11/17/2023
0.10.1 22 02/10/2024
0.10.0 20 02/10/2024
0.9.11 42 02/11/2020
0.9.10 19 11/16/2023
0.9.9.2 19 02/10/2024
0.9.9.1 25 02/10/2024
0.9.9 22 02/10/2024
0.9.8.1 22 02/10/2024
0.9.8 18 02/10/2024
0.9.7 18 02/10/2024
0.9.6 20 02/10/2024
0.9.5 23 11/16/2023
0.9.4 26 11/18/2023
0.9.3 19 02/10/2024
0.9.2 20 11/16/2023
0.9.1 21 11/17/2023
0.9.0 26 02/10/2024
0.8.9 21 11/16/2023
0.8.8 22 11/17/2023
0.8.7.1 22 01/24/2024
0.8.7 21 11/16/2023
0.8.6 19 02/10/2024
0.8.5 18 11/17/2023
0.8.4.1 21 02/10/2024
0.8.4 26 12/20/2023
0.8.3 0 04/21/2015
0.8.2 0 04/15/2015
0.8.1 20 02/10/2024
0.8.0 22 11/17/2023
0.7.0 21 11/16/2023
0.6.1 17 02/09/2024
0.6.0 24 02/10/2024
0.5.1 25 11/18/2023
0.5.0 19 02/10/2024
0.4.0 20 02/10/2024
0.3.7 22 11/16/2023
0.3.6 19 02/10/2024
0.3.5 21 11/17/2023
0.3.4 19 11/16/2023
0.3.3 26 11/16/2023
0.3.2 17 02/10/2024
0.3.1 16 02/10/2024
0.3.0 20 11/18/2023
0.2.9 20 02/10/2024
0.2.8 21 11/18/2023
0.2.7 20 02/10/2024
0.2.6 18 02/10/2024
0.2.5 25 11/17/2023
0.2.4 18 02/10/2024
0.2.3 18 11/17/2023
0.2.2 27 11/18/2023
0.2.1 20 02/10/2024
0.2.0 19 02/10/2024