HTML-Parsing in C# (.NET): Überblick über die Bibliotheken HtmlAgilityPack und AngleSharp
HTML-Parsing ist eine der Kernaufgaben bei der Entwicklung von Web-Scraping-Tools, Inhaltsanalysatoren und Automatisierungslösungen. Im Ökosystem von C# (.NET) gibt es mehrere ausgereifte Bibliotheken, die es ermöglichen, Daten aus HTML-Dokumenten zu extrahieren, den DOM-Baum zu manipulieren und Abfragen an Elemente zu stellen. In diesem Artikel betrachten wir die beiden beliebtesten Bibliotheken im Detail: HtmlAgilityPack und AngleSharp, ihre Funktionen, Syntax und Anwendungsbeispiele.
1. HtmlAgilityPack – Ein bewährtes Werkzeug
HtmlAgilityPack (HAP) ist eine der ältesten und am weitesten verbreiteten Bibliotheken für HTML-Parsing in .NET. Sie unterstützt sowohl .NET Framework als auch .NET Core / .NET 5+. Der Hauptvorteil liegt in der Einfachheit und Fehlertoleranz bei der Verarbeitung von „schmutzigem“ HTML (ungültiges Markup, nicht geschlossene Tags).
Installation
// Über NuGet Package ManagerInstall-Package HtmlAgilityPack
// Oder über .NET CLIdotnet add package HtmlAgilityPackBasisbeispiel: Extrahieren von H1-Überschriften
using HtmlAgilityPack;
string html = @"<html><body> <h1>Überschrift 1</h1> <h1>Überschrift 2</h1> <p>Absatztext</p></body></html>";
var doc = new HtmlDocument();doc.LoadHtml(html);
var h1Nodes = doc.DocumentNode.SelectNodes("//h1");if (h1Nodes != null){ foreach (var node in h1Nodes) { Console.WriteLine(node.InnerText.Trim()); }}// Ausgabe:// Überschrift 1// Überschrift 2Verwendung von XPath und CSS-Selektoren
HtmlAgilityPack verwendet standardmäßig XPath für die Navigation. Mit dem Paket HtmlAgilityPack.CssSelectors können jedoch auch CSS-Selektoren verwendet werden:
// Installation: dotnet add package HtmlAgilityPack.CssSelectorsusing HtmlAgilityPack.CssSelectors;
// ... nach dem Laden des Dokumentsvar links = doc.DocumentNode.QuerySelectorAll("a.external-link");foreach (var link in links){ Console.WriteLine(link.GetAttributeValue("href", ""));}Parsing einer echten Website
using System.Net.Http;using HtmlAgilityPack;
var url = "https://example.com/articles";var httpClient = new HttpClient();var html = await httpClient.GetStringAsync(url);
var doc = new HtmlDocument();doc.LoadHtml(html);
// Alle Artikelüberschriften extrahierenvar articles = doc.DocumentNode.SelectNodes("//article/h2/a");if (articles != null){ foreach (var article in articles) { var title = article.InnerText.Trim(); var link = article.GetAttributeValue("href", ""); Console.WriteLine($"{title} -> {link}"); }}2. AngleSharp – Eine moderne Alternative
AngleSharp ist eine neuere Bibliothek, die volle Unterstützung für HTML5, CSS3, JavaScript (eingeschränkt) und DOM-Spezifikationen bietet. Sie ist ideal für Aufgaben, die eine genaue Übereinstimmung mit dem Browser-Rendering erfordern. Unterstützt .NET Standard 2.0+, was Kompatibilität mit .NET Framework 4.6.1+ und .NET Core bedeutet.
Installation
dotnet add package AngleSharpBasisbeispiel: Extrahieren aller Links
using AngleSharp;using AngleSharp.Dom;using AngleSharp.Html.Parser;
var html = @"<html><body> <a href='https://example.com'>Example</a> <a href='https://test.com'>Test</a></body></html>";
var parser = new HtmlParser();IDocument document = parser.ParseDocument(html);
var links = document.QuerySelectorAll("a");foreach (var link in links){ Console.WriteLine($"{link.TextContent} -> {link.GetAttribute("href")}");}// Ausgabe:// Example -> https://example.com// Test -> https://test.comArbeiten mit Attributen
Auch in der Bibliothek
Ehcache für Java: Komplettes Tutorial mit Beispielen
Contacts Swift: Komplette Anleitung mit Beispielen
SMS-Versand mit C# (.NET): API-Bibliotheken und Codebeispiele
Supertest für JavaScript (Node.js): Komplettguide mit Beispielen
Aufgabenwarteschlangen für Rust: Überblick über beliebte Bibliotheken und Tools