HTML-Parsing in C# (.NET): Überblick über Bibliotheken und Codebeispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

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 HtmlAgilityPack


Beispiel: 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 AngleSharp


Beispiel: 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 CsQuery


Beispiel: 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

Empfehlungen