Web Scraper C#

Web Scraping, auch bekannt als Web Crawling, Web Harvesting oder Data Scraping, wird zum Extrahieren von Daten aus Websites verwendet. Ein Web Scraper verwendet verschiedene Datenselektoren wie CSS-Selektoren, XPath oder beides, um Daten aus den Webseiten zu extrahieren. Beide Selektoren sind effizient zum Sammeln und Analysieren von Informationen aus dem Internet. Dieser Artikel behandelt die Erstellung eines Web Scrapers in C#, insbesondere die Informationen zu HTML-Navigation, XPath-Abfrage und CSS-Selektor.

Konfiguration der C#-Web-Scraping-Bibliothek

Aspose.HTML for .NET ist eine Web-Scraping-Bibliothek, die einfach konfiguriert werden kann, indem Sie die Referenz-DLL-Dateien aus dem Abschnitt New Releases herunterladen oder den folgenden NuGet-Installationsbefehl ausführen :

PM> Install-Package Aspose.Html

Web Scraping mit HTML-Navigation in C#

Sie können verschiedene Eigenschaften der Klasse Node verwenden, um durch die HTML-Dokumente zu navigieren. Das folgende Code-Snippet erklärt, wie man in C# auf einer HTML-Webseite navigiert:

// HTML-Code vorbereiten
var html_code = "<span>Hello</span> <span>World!</span>";

// Initialisieren Sie ein Dokument aus dem vorbereiteten Code
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
    // Holen Sie sich den Verweis auf das erste Kind (erstes SPAN) des BODY
    var element = document.Body.FirstChild;
    Console.WriteLine(element.TextContent); // output: Hello

    // Rufen Sie den Verweis auf die Leerzeichen zwischen HTML-Elementen ab
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: ' '

    // Rufen Sie den Verweis auf das zweite SPAN-Element ab
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: World!
}

Inspektion des HTML-Dokuments und seiner Elemente

Die API bietet auch die allgemeine Verwendung von Elementdurchlauffunktionen. Das folgende Code-Snippet zeigt, wie Sie eine detaillierte Inspektion verschiedener Elemente der API durchführen.

//Laden Sie ein Dokument aus einer Datei
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");

// Geben Sie den Pfad zur Quell-HTML-Datei in Ihrem lokalen Dateisystem an
using (var document = new Aspose.Html.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     
}

Benutzerdefinierte Filterverwendung für Web Scraper in C#

Sie können einen benutzerdefinierten Filter mithilfe eines ITreeWalker- oder eines INodeIterator-Schnittstellenobjekts zusammen mit einer benutzerdefinierten Filterimplementierung implementieren. Das folgende Code-Snippet erklärt, wie Sie dem Prozess folgen:

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;
    }
}

Nachdem Sie einen benutzerdefinierten Filter implementiert haben, können Sie mit dem folgenden Code schnell auf einer Webseite navigieren:

var code = @"
    <p>Hello</p>
    <img src='image1.png'>
    <img src='image2.png'>
    <p>World!</p>";

// Initialisieren Sie ein Dokument basierend auf dem vorbereiteten Code
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // 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, alle Knoten iteriert und unsere benutzerdefinierte Implementierung des Filters verwendet
    using (var iterator = document.CreateTreeWalker(document, Aspose.Html.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 = (Aspose.Html.HTMLImageElement)iterator.CurrentNode;

            System.Console.WriteLine(image.Src);
            // Ausgabe: image1.png
            // Ausgabe: image2.png
        }
    }
}

Web-Scraping mit XPath-Abfrage in C#

XPath kann verwendet werden, um Daten aus HTML-Dokumenten zu extrahieren. Das folgende Code-Snippet erläutert die Verwendung von XPath Query für Web-Scraping in C#:

// HTML-Code vorbereiten
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
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Hier werten wir den XPath-Ausdruck aus, in dem wir alle untergeordneten SPAN-Elemente aus Elementen auswählen, deren Attribut „class“ 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!
    }
}

Web Scraping mit CSS Selector in C#

Sie können ein Suchmuster erstellen, um Elemente in einer Dokumentstruktur basierend auf der Syntax von CSS-Selektoren abzugleichen. Das folgende Code-Snippet erklärt, wie man Web Scraping mit CSS Selector in C# durchführt:

// HTML-Code vorbereiten
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
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Hier erstellen wir einen CSS-Selektor, der alle Elemente extrahiert, deren 'class'-Attribut gleich 'happy' ist, und ihre untergeordneten SPAN-Elemente
    var elements = document.QuerySelectorAll(".happy span");

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

Holen Sie sich eine kostenlose Lizenz

Sie können eine kostenlose temporäre Lizenz anfordern, um die API in vollem Umfang zu evaluieren.

Fazit

In diesem Artikel haben Sie die C#-Web-Scraping-Bibliothek Aspose.HTML für .NET kennengelernt, die mehrere Methoden zum Erstellen eines Web-Scrapers in C# enthält. Es behandelt HTML-Navigation, XPath-Abfrage sowie die CSS-Auswahlmethode, um Ihre Anforderungen zu erfüllen. Falls Sie jedoch Ihre Bedenken oder Fragen besprechen müssen, schreiben Sie uns bitte im Forum.

Siehe auch