HTML-Parsing in C# (.NET): Bibliotheken HtmlAgilityPack und AngleSharp

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): Ü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 HtmlAgilityPack


Basisbeispiel: 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 2


Verwendung 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 AngleSharp


Basisbeispiel: 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.com


Arbeiten mit Attributen

Empfehlungen