Daten-Parsing und -Scraping mit C#: Wenn Python nicht die einzige Wahl ist
\n\nWenn Sie gewohnt sind, dass Parsing die Domäne von Python mit seinem BeautifulSoup und Scrapy ist, habe ich eine Überraschung für Sie. C# in der Welt des Web-Scrapings ist wie ein Schweizer Taschenmesser: leistungsstark, zuverlässig und mit einer Vielzahl von Klingen, von denen Sie nicht einmal wussten. Das Parsen mit C# öffnet Türen zur Integration in die .NET-Ökosystem, zu leistungsstarken Anwendungen und einer strengen Typisierung, die vor dummen Fehlern während der Kompilierung schützt.
\n\nIn diesem Artikel zeige ich Ihnen, wie Sie C# zur Datenerfassung nutzen, analysiere echte Codebeispiele und erkläre, warum Ihr nächster Parser in C# geschrieben werden sollte, auch wenn Sie bisher nicht darüber nachgedacht haben.
\n\nWarum C# und nicht Python? Drei eiserne Argumente
\n\nJa, Python ist der König des Prototypings. Aber wenn es um industrielles Daten-Scraping mit C# geht, erhalten Sie:
\n\n- \n
- Leistung: C# wird in Maschinencode kompiliert (über JIT oder AOT), was eine 2- bis 5-fache Geschwindigkeitssteigerung beim Parsen großer Datenmengen bietet. \n
- Typsicherheit: Sie werden niemals eine Zahl übergeben, wo ein String erwartet wird. Der Compiler fängt den Fehler vor der Ausführung ab. \n
- .NET-Ökosystem: Ein Parser in C# lässt sich leicht in ASP.NET, WPF, Konsolen-Dienstprogramme und sogar Unity integrieren (ja, Sie können Daten aus einem Spiel parsen). \n
Und vor allem meistert C# Aufgaben, die Multithread-Parsing, Datenbankarbeit und komplexe Logik zur Informationsgewinnung erfordern, hervorragend.
\n\nWerkzeuge: Die richtige Bibliothek für das Parsing mit C# auswählen
\n\nDas Parsen von Websites mit C# beginnt mit der Wahl des richtigen Werkzeugs. Ich hebe drei Hauptansätze hervor, die 95% der Web-Scraping-Aufgaben abdecken.
\n\nHtmlAgilityPack: Der Klassiker für HTML-Parsing
\n\nDies ist die beliebteste Bibliothek für das Parsing mit C#. Sie wandelt HTML in eine Baumstruktur um, mit der Sie bequem über XPath oder LINQ arbeiten können. Ideal für statische Seiten.
\n\nusing HtmlAgilityPack;\n\nvar web = new HtmlWeb();\nvar doc = web.Load("https://example.com/articles");\n\n// Alle h2-Überschriften mit der Klasse "title" auswählen\nvar titles = doc.DocumentNode\n .SelectNodes("//h2[@class='title']")\n .Select(node => node.InnerText.Trim())\n .ToList();\n\nforeach (var title in titles)\n{\n Console.WriteLine($"Gefundene Überschrift: {title}");\n}\n\nDieser Code lädt die Seite, parst sie und sammelt die Überschriften. HtmlAgilityPack kann mit fehlerhaftem HTML umgehen und korrigiert nicht geschlossene Tags – was auf echten Websites häufig vorkommt.
\n\nAngleSharp: Die moderne Alternative
\n\nAngleSharp ist eine neuere Bibliothek, die CSS-Selektoren (wie in jQuery) unterstützt und mit dem DOM-Modell arbeitet. Das Daten-Parsing mit C# mit AngleSharp fühlt sich natürlich an für diejenigen, die JavaScript kennen.
\n\nusing AngleSharp;\nusing AngleSharp.Html.Parser;\n\nvar context = BrowsingContext.New(Configuration.Default);\nvar parser = context.GetService<IHtmlParser>();\n\nvar document = await parser.ParseDocumentAsync(htmlString);\nvar prices = document.QuerySelectorAll(".product-price")\n .Select(el => el.TextContent.Trim())\n .ToList();\n\nAngleSharp eignet sich hervorragend, wenn Sie nicht nur Daten sammeln, sondern auch DOM-Manipulationen durchführen müssen – z. B. Attribute vor dem Speichern ersetzen.
\n\nSelenium WebDriver: Für dynamische Websites
\n\nWenn eine Website Inhalte über JavaScript lädt (React, Vue, Angular), hilft ein normaler Parser nicht weiter. Hier kommt Selenium ins Spiel. Es emuliert einen Browser und ermöglicht das Scrapen von Daten nach vollständigem Laden der Seite.
\n\nusing OpenQA.Selenium;\nusing OpenQA.Selenium.Chrome;\n\nusing (var driver = new ChromeDriver())\n{\n driver.Navigate().GoToUrl("https://example.com/dynamic-page");\n \n // Warten, bis das Element erscheint\n var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));\n wait.Until(d => d.FindEleme