AngleSharp 1.0.2-alpha-278

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.1 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

The MIT License (MIT)

Copyright (c) 2013 - 2023 AngleSharp

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Showing the top 20 packages that depend on AngleSharp.

Packages Downloads
AngleSharp.Css
Extends the CSSOM from the core AngleSharp library.
74
AngleSharp.Css
Extends the CSSOM from the core AngleSharp library.
75
AngleSharp.Wrappers
A library of wrappers for AngleSharp. Allows you to replace a real AngleSharp DOM tree but still keep the queried/returned node references. Built for and used by https://github.com/bUnit-dev/bUnit.
78
bunit.web
bUnit.web is the web specific parts of bUnit, that enables you to easily test and verify the output of Blazor (web) component.
77
bunit.web
bUnit.web is the web specific parts of bUnit, that enables you to easily test and verify the output of Blazor (web) component.
79
ZhonTai.Admin
中台Admin权限管理接口库
79
ZhonTai.Admin
中台Admin权限管理接口库
80
ZhonTai.Admin
中台Admin权限管理接口库
81
ZhonTai.Admin
中台Admin权限管理接口库
94
ZhonTai.Admin
中台Admin权限管理接口库
105
ZhonTai.Admin
中台Admin权限管理接口库
107
ZhonTai.Admin.Core
中台Admin权限管理核心库
76
ZhonTai.Admin.Core
中台Admin权限管理核心库
77
ZhonTai.Admin.Core
中台Admin权限管理核心库
80
ZhonTai.Admin.Core
中台Admin权限管理核心库
82
ZhonTai.Admin.Core
中台Admin权限管理核心库
85
ZhonTai.Admin.Core
中台Admin权限管理核心库
89
ZhonTai.Admin.Core
中台Admin权限管理核心库
91

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

.NET Standard 2.0

.NET Framework 4.6.1

.NET Framework 4.7.2

.NET 6.0

.NET 7.0

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