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 oder automatisierten Tests. Im .NET-Ökosystem gibt es mehrere leistungsstarke Bibliotheken, mit denen Sie Daten aus HTML-Dokumenten extrahieren, den DOM-Baum manipulieren und komplexe Abfragen durchführen können. In diesem Artikel betrachten wir die beiden beliebtesten Bibliotheken: HtmlAgilityPack und AngleSharp. Sie erfahren ihre Besonderheiten, Vorteile und erhalten fertige Codebeispiele in C#.



HtmlAgilityPack: Der klassische Ansatz



HtmlAgilityPack (HAP) ist die älteste und am weitesten verbreitete Bibliothek für HTML-Parsing in .NET. Sie bietet eine intuitive API für die Navigation im DOM-Baum und unterstützt XPath- und LINQ-Abfragen. Die wichtigsten Funktionen:



  • Laden von HTML aus einem String, einer Datei oder einer URL.
  • Unterstützung von XPath 1.0 für präzise Elementsuche.
  • Arbeit mit Attributen, Text und verschachtelten Knoten.
  • Automatische Korrektur von fehlerhaftem HTML (z. B. nicht geschlossene Tags).


Installation

Installieren Sie die Bibliothek über NuGet:

Install-Package HtmlAgilityPack

Oder über die .NET CLI:

dotnet add package HtmlAgilityPack


Beispiel: Extrahieren von Nachrichtenüberschriften

Angenommen, wir möchten die Überschriften einer Nachrichten-Website parsen. So geht das mit HAP und XPath:



using HtmlAgilityPack;using System;using System.Linq;

class Program{ static void Main() { // HTML-Dokument laden var web = new HtmlWeb(); var doc = web.Load("https://example-news.com"); // Alle h2-Überschriften mit der Klasse "news-title" auswählen var titles = doc.DocumentNode .SelectNodes("//h2[@class='news-title']"); if (titles != null) { foreach (var title in titles) { Console.WriteLine(title.InnerText.Trim()); } } }}


In diesem Beispiel verwenden wir den XPath-Ausdruck //h2[@class='news-title'], um alle <h2>-Elemente mit der angegebenen Klasse zu finden. Die Methode SelectNodes gibt eine Knotensammlung zurück, und InnerText extrahiert den Text ohne HTML-Tags.



Arbeit mit Attributen

Häufig muss der Wert eines Attributs abgerufen werden, z. B. Links aus <a>-Tags:



var links = doc.DocumentNode.SelectNodes("//a[@href]");if (links != null){    foreach (var link in links)    {        string href = link.GetAttributeValue("href", "");        Console.WriteLine(href);    }}


AngleSharp: Moderner Parser mit CSS-Selektoren



AngleSharp ist eine modernere Bibliothek, die nicht nur XPath, sondern auch CSS-Selektoren unterstützt, was sie für Entwickler, die mit Webtechnologien vertraut sind, besonders praktisch macht. Sie entspricht zudem vollständig den W3C-Standards und kann mit dynamischen Inhalten arbeiten.



  • Unterstützung von CSS-Selektoren (wie in jQuery).
  • Arbeit mit HTML, XML, SVG und MathML.
  • Möglichkeit zur Ausführung von JavaScript (über Erweiterungen).
  • Asynchrones Laden von Dokumenten.


Installation

dotnet add package AngleSharp


Beispiel: Datenextraktion mit CSS-Selektoren

Wiederholen wir das vorherige Beispiel, diesmal mit AngleSharp und CSS-Selektoren:



using AngleSharp;using AngleSharp.Html.Parser;using System;using System.Linq;using System.Threading.Tasks;

class Program{ static async Task Main() { // Parser erstellen var parser = new HtmlParser(); // HTML laden (aus einem String oder einer URL) var document = await parser.ParseDocumentAsync( a

Empfehlungen