Webscraping mit C#

Web Scraping ist eine Technik zum Extrahieren von Daten aus Websites. Es hilft, den Prozess des Extrahierens von Daten aus Websites und HTML-Dateien zu automatisieren. Als C#-Entwickler können wir Daten wie Bilder, Videos, Audio usw. einfach von den Webseiten untersuchen, erfassen und extrahieren. In diesem Artikel lernen wir, wie man Web Scraping mit HTML-Parsing mit C# durchführt.

Folgende Themen sollen in diesem Artikel behandelt werden:

C#-Web-Scraping-API

Für das Web-Scraping von HTML-Dateien oder URLs verwenden wir die API Aspose.HTML for .NET. Es ist eine fortschrittliche HTML-Verarbeitungs-API, die es ermöglicht, HTML-Dokumente ohne externe Software zu generieren, zu ändern, zu extrahieren, zu konvertieren und zu rendern. Bitte entweder die DLL der API herunterladen oder sie mit NuGet installieren.

PM> Install-Package Aspose.Html

Lesen und extrahieren Sie HTML mit C#

Wir können HTML aus jedem HTML-Dokument lesen und extrahieren, indem wir die folgenden Schritte ausführen:

  1. Laden Sie ein HTML-Dokument mit der Klasse HTMLDocument.
  2. Zeigen Sie den inneren HTML-Code der Datei in der Konsole an.

Das folgende Codebeispiel zeigt, wie HTML-Inhalte mit C# gelesen und extrahiert werden.

// Dieses Codebeispiel zeigt, wie der Inhalt eines HTML-Dokuments angezeigt wird
// HTML-Dokument laden
var document = new HTMLDocument(@"D:\Files\html\input.html");

// Inneres HTML des Dokuments anzeigen
Console.WriteLine(document.Body.InnerHTML);
Lesen und extrahieren Sie HTML mit C#.

Lesen und extrahieren Sie HTML mit C#.

Ebenso können wir HTML von Live-Websites lesen und extrahieren, wie unten gezeigt:

// Dieses Codebeispiel zeigt, wie Inhalte von Live-Website-URLs angezeigt werden.
// URL initialisieren
Url url = new Url("https://en.wikipedia.org/wiki/HTML");

// Laden Sie die HTML-Datei mit der URL-Instanz
HTMLDocument document = new HTMLDocument(url);

// Zeigt den inneren HTML-Code der Datei auf der Konsole an
Console.WriteLine(document.Body.InnerHTML);

Untersuchen Sie Dokumentelemente mit C#

Wir können das Dokument und seine Elemente überprüfen, indem wir die folgenden Schritte ausführen:

  1. Laden Sie ein HTML-Dokument mit der Klasse HTMLDocument.
  2. Rufen Sie das HTML-Element des Dokuments ab.
  3. Holen Sie sich das erste/letzte Element des HTML-Elements.
  4. Elementdetails wie TagName, TextContent anzeigen.

Das folgende Codebeispiel zeigt, wie die Dokumentelemente mit C# überprüft werden.

// Dieses Codebeispiel zeigt, wie HTML-Elemente untersucht werden.
// Laden Sie ein Dokument aus einer Datei
string documentPath = @"D:\Files\html\input.html";
HTMLDocument document = new HTMLDocument(documentPath);

// Holen Sie sich das HTML-Element des Dokuments
var element = document.DocumentElement;
Console.WriteLine(element.TagName); // HTML

// Holen Sie sich das letzte Element des HTML-Elements
element = element.LastElementChild;
Console.WriteLine(element.TagName); // BODY

// Rufen Sie das erste Element des body-Elements ab
element = element.FirstElementChild;
Console.WriteLine(element.TagName); // H1
Console.WriteLine(element.TextContent); // Header 1

Suchen Sie bestimmte Elemente mithilfe von Filtern in C#

Wir können benutzerdefinierte Filter verwenden, um ein bestimmtes Element zu finden, z. B. alle Bilder, Links usw. abrufen. Zu diesem Zweck stellt die API die TreeWalker-Schnittstelle bereit. Es ermöglicht das Navigieren in einem Dokumentbaum oder Unterbaum unter Verwendung der Ansicht des Dokuments, die durch ihre whatToShow-Flags und Filter (falls vorhanden) definiert ist. Wir können bestimmte Elemente mithilfe von Filtern finden, indem wir die folgenden Schritte ausführen:

  1. Definieren Sie Filter mithilfe der NodeFilter-Klasse und überschreiben Sie die AcceptNode()-Methode.
  2. Laden Sie ein HTML-Dokument mit der Klasse HTMLDocument.
  3. Rufen Sie die Methode CreateTreeWalker() auf. Als Argumente werden der Root-Knoten, das anzuzeigende Element und der NodeFilter verwendet.

Das folgende Codebeispiel zeigt, wie bestimmte Elemente mithilfe von C# gesucht werden.

// Dieses Codebeispiel zeigt, wie Daten mithilfe von Filtern abgefragt werden.
// Laden Sie ein HTML-Dokument
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");

// Um die HTML-Navigation zu starten, müssen wir eine Instanz von TreeWalker erstellen.
// Die angegebenen Parameter bedeuten, dass es vom Stamm des Dokuments ausgeht,
// iterieren Sie alle Knoten und verwenden Sie unsere benutzerdefinierte Implementierung des Filters
using (var iterator = document.CreateTreeWalker(document, Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
{
    while (iterator.NextNode() != null)
    {
        // Da wir unseren eigenen Filter verwenden, ist der aktuelle Knoten immer eine Instanz des HTMLImageElement.
        // Daher benötigen wir hier keine zusätzlichen Validierungen.
        var image = (HTMLImageElement)iterator.CurrentNode;

        System.Console.WriteLine(image.Src);
        // Ausgabe: image1.png
        // Ausgabe: image2.png
    }
}
// Dieses Codebeispiel zeigt, wie der Node-Filter definiert wird.
class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
    public override short AcceptNode(Aspose.Html.Dom.Node n)
    {
        // Der aktuelle Filter überspringt alle Elemente außer IMG-Elemente.
        return string.Equals("img", n.LocalName)
            ? FILTER_ACCEPT
            : FILTER_SKIP;
    }
}

Daten aus HTML mit C# abfragen

Wir können XPath Query auch verwenden, um Daten aus einem HTML-Dokument abzufragen, indem wir die folgenden Schritte ausführen:

  1. Laden Sie ein HTML-Dokument mit der Klasse HTMLDocument.
  2. Rufen Sie die Methode Evaluate() auf. Es nimmt XPath-Ausdruckszeichenfolge, Dokument und Typ als Argumente.
  3. Durchlaufen Sie schließlich die resultierenden Knoten und zeigen Sie Text an

Das folgende Codebeispiel zeigt, wie Daten mit XPath-Abfragen unter Verwendung von C# abgefragt werden.

// Dieses Codebeispiel zeigt, wie Daten mit einer XPath-Abfrage abgefragt werden.
// Bereiten Sie einen HTML-Code vor
var code = @"
    <div class='happy'>
        <div>
            <span>Hello!</span>
        </div>
    </div>
    <p class='happy'>
        <span>World</span>
    </p>
";

// Initialisieren Sie ein Dokument basierend auf dem vorbereiteten Code
HTMLDocument document = new HTMLDocument(code, ".");

// Hier werten wir den XPath-Ausdruck aus, in dem wir alle untergeordneten SPAN-Elemente auswählen 
// aus Elementen, deren 'class'-Attribut gleich 'happy' ist:
var result = document.Evaluate("//*[@class='happy']//span",
    document,
    null,
    Aspose.Html.Dom.XPath.XPathResultType.Any,
    null);

// Iterieren Sie über die resultierenden Knoten
for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
{
    System.Console.WriteLine(node.TextContent);
    // Ausgabe: Hallo
    // Ausgabe: Welt!
}

Extrahieren mit CSS Selector in C#

Wir können HTML-Inhalte auch mit CSS-Selektoren extrahieren. Zu diesem Zweck stellt die API die Methode QuerySelectorAll() bereit, die eine Navigation durch ein HTML-Dokument ermöglicht und die benötigten Elemente durchsucht. Es nimmt den Abfrageselektor als Parameter und gibt eine passende NodeList aller Elemente zurück. Wir können mit CSS-Selektoren abfragen, indem wir die folgenden Schritte ausführen:

  1. Laden Sie ein HTML-Dokument mit der Klasse HTMLDocument.
  2. Rufen Sie die Methode QuerySelectorAll() auf. Es nimmt den Abfrageselektor als Argument.
  3. Durchlaufen Sie schließlich die resultierende Liste der Elemente.

Das folgende Codebeispiel zeigt, wie Sie HTML-Inhalte mithilfe von CSS-Selektoren in C# extrahieren.

// Initialisieren Sie ein Dokument basierend auf dem vorbereiteten Code
HTMLDocument document = new HTMLDocument(@"D:\Files\html\input.html");

// Hier erstellen wir einen CSS-Selektor, der alle div-Elemente extrahiert
var elements = document.QuerySelectorAll("div");

// Iteriere über die resultierende Liste von Elementen
foreach (Aspose.Html.HTMLElement element in elements)
{
    System.Console.WriteLine(element.InnerHTML);
}

Holen Sie sich eine kostenlose Lizenz

Bitte testen Sie die API ohne Evaluierungseinschränkungen, indem Sie eine kostenlose temporäre Lizenz anfordern.

Fazit

In diesem Artikel haben wir gelernt, wie man:

  • lesen und extrahieren Sie den Inhalt eines HTML-Dokuments mit C#;
  • Untersuchen Sie Dokumentelemente und finden Sie ein bestimmtes Element aus HTML;
  • Abfragespezifische Daten und Extrahieren von Daten mit CSS Selector.

Außerdem können Sie mithilfe der Dokumentation mehr über Aspose.HTML für die .NET-API erfahren. Bei Unklarheiten können Sie uns gerne im Forum kontaktieren.

Siehe auch