HTML-Parsing in C# (.NET): vom Einfachen zum Komplexen
HTML-Parsing ist eine der zentralen Aufgaben bei der Entwicklung von Web-Scraping-Tools, Inhaltsanalysatoren und Automatisierungswerkzeugen. Im Ökosystem von C# (.NET) gibt es mehrere ausgereifte Bibliotheken, die es ermöglichen, Daten aus HTML-Dokumenten effizient zu extrahieren, selbst wenn das Markup ungültig ist. In diesem Artikel betrachten wir die drei beliebtesten Werkzeuge: HtmlAgilityPack, AngleSharp und CsQuery, und analysieren praktische Beispiele für deren Verwendung.
1. HtmlAgilityPack – die klassische Wahl
HtmlAgilityPack (HAP) ist die am weitesten verbreitete Bibliothek für HTML-Parsing in C#. Sie unterstützt XPath und LINQ, was sie ideal für die Arbeit mit hierarchischen Strukturen macht. HAP korrigiert automatisch ungültiges HTML-Markup, was besonders beim Parsen von "rohen" Seiten nützlich ist.
Installation über NuGet:
Install-Package HtmlAgilityPackBeispiel: Extrahieren aller Links von einer Seite
using HtmlAgilityPack;
string url = "https://example.com";var web = new HtmlWeb();var doc = web.Load(url);
var links = doc.DocumentNode.SelectNodes("//a[@href]");if (links != null){ foreach (var link in links) { string href = link.GetAttributeValue("href", ""); string text = link.InnerText.Trim(); Console.WriteLine($"{text}: {href}"); }}Beispiel: Extrahieren von Daten aus einer Tabelle
var tableRows = doc.DocumentNode.SelectNodes("//table[@id='data-table']//tr");foreach (var row in tableRows){ var cells = row.SelectNodes("td"); if (cells != null) { var rowData = cells.Select(c => c.InnerText.Trim()).ToList(); Console.WriteLine(string.Join(" | ", rowData)); }}2. AngleSharp – die moderne Alternative
AngleSharp ist eine modernere Bibliothek, die vollständig in C# geschrieben ist und den W3C-Spezifikationen entspricht. Sie unterstützt CSS-Selektoren, was sie für diejenigen praktisch macht, die an eine jQuery-ähnliche Syntax gewöhnt sind. AngleSharp kann auch mit DOM, SVG und MathML arbeiten.
Installation über NuGet:
Install-Package AngleSharpBeispiel: Parsing mit CSS-Selektoren
using AngleSharp;using AngleSharp.Dom;
var config = Configuration.Default.WithDefaultLoader();var context = BrowsingContext.New(config);var document = await context.OpenAsync("https://example.com");
// Alle Elemente mit der Klasse "product" abrufenvar products = document.QuerySelectorAll(".product");foreach (var product in products){ var name = product.QuerySelector(".product-name")?.TextContent.Trim(); var price = product.QuerySelector(".product-price")?.TextContent.Trim(); Console.WriteLine($"{name}: {price}");}Beispiel: Extrahieren von JSON aus einem Skript
var scripts = document.QuerySelectorAll("script[type='application/ld+json']");foreach (var script in scripts){ var json = script.TextContent; // Anschließend kann JSON über System.Text.Json deserialisiert werden Console.WriteLine(json);}3. CsQuery – jQuery-ähnliche Syntax
CsQuery ist ein Port von jQuery für C#, der eine vertraute API für die Arbeit mit dem DOM bietet. Es ist besonders praktisch für diejenigen, die von JavaScript zu C# migrieren. Es ist jedoch zu beachten, dass das Projekt seltener aktualisiert wird als AngleSharp und möglicherweise die neuesten .NET-Versionen nicht unterstützt.
Installation über NuGet:
Install-Package CsQueryBeispiel: Extrahieren von Text aus Elementen
using CsQuery;
string html = "<div class='content'><p>Hallo, Welt!</p></div>";var dom = CQ.Create(html);
var text = dom[".content Auch in der Bibliothek
Konfiguration von Kotlin-Anwendungen: Bibliotheken und Ansätze
Composer für PHP: Vollständiger Leitfaden mit Beispielen
Swagger/OpenAPI Generierung auf Kotlin: Werkzeuge und Beispiele