Skrobak sieciowy C#

Web Scraping, znany również jako indeksowanie sieci, zbieranie danych lub zbieranie danych, służy do wydobywania danych ze stron internetowych. Skrobak sieciowy wykorzystuje różne selektory danych, takie jak selektory CSS, XPath lub oba z nich, w celu wyodrębnienia danych ze stron internetowych. Oba te selektory są skuteczne w zbieraniu i analizowaniu informacji z sieci. W tym artykule omówiono sposób tworzenia skrobaka sieci Web w języku C#, w szczególności informacje o nawigacji HTML, zapytaniu XPath i selektorze CSS.

Konfiguracja biblioteki skrobania sieci Web C#

Aspose.HTML for .NET to biblioteka do skrobania stron internetowych, którą można łatwo skonfigurować, pobierając referencyjne pliki DLL z sekcji New Releases lub uruchamiając następującą komendę instalacyjną NuGet :

PM> Install-Package Aspose.Html

Skrobanie stron internetowych z nawigacją HTML w języku C#

Możesz użyć różnych właściwości klasy Node do poruszania się po dokumentach HTML. Poniższy fragment kodu wyjaśnia, jak poruszać się po stronie HTML w języku C#:

// Przygotuj kod HTML
var html_code = "<span>Hello</span> <span>World!</span>";

// Zainicjuj dokument z przygotowanego kodu
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
    // Uzyskaj odniesienie do pierwszego elementu potomnego (pierwszy SPAN) CIAŁA
    var element = document.Body.FirstChild;
    Console.WriteLine(element.TextContent); // output: Hello

    // Uzyskaj odniesienie do białych znaków między elementami HTML
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: ' '

    // Pobierz odwołanie do drugiego elementu SPAN
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: World!
}

Inspekcja dokumentu HTML i jego elementów

Interfejs API zapewnia również uogólnione użycie funkcji przechodzenia przez elementy. Poniższy fragment kodu pokazuje, jak przeprowadzić szczegółową inspekcję różnych elementów interfejsu API.

//Załaduj dokument z pliku
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");

// Określ ścieżkę do źródłowego pliku HTML w lokalnym systemie plików
using (var document = new Aspose.Html.HTMLDocument(documentPath))
{
    // Pobierz element HTML dokumentu
    var element = document.DocumentElement;                
    Console.WriteLine(element.TagName); // HTML
    
    // Pobierz ostatni element elementu HTML
    element = element.LastElementChild;
    Console.WriteLine(element.TagName); // BODY
    
    // Pobierz pierwszy element elementu body
    element = element.FirstElementChild;
    Console.WriteLine(element.TagName); // H1
    Console.WriteLine(element.TextContent); // Header 1     
}

Niestandardowe użycie filtra dla narzędzia Web Scraper w języku C#

Możesz zaimplementować filtr niestandardowy za pomocą obiektu interfejsu ITreeWalker lub INodeIterator wraz z implementacją niestandardowego filtra. Poniższy fragment kodu wyjaśnia, jak wykonać ten proces:

class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
    public override short AcceptNode(Aspose.Html.Dom.Node n)
    {
        // Bieżący filtr pomija wszystkie elementy oprócz elementów IMG.
        return string.Equals("img", n.LocalName)
            ? FILTER_ACCEPT
            : FILTER_SKIP;
    }
}

Po zaimplementowaniu niestandardowego filtra możesz szybko poruszać się po stronie internetowej za pomocą następującego kodu:

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

// Zainicjuj dokument na podstawie przygotowanego kodu
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Aby rozpocząć nawigację HTML, musimy utworzyć instancję TreeWalker.
    // Podane parametry oznaczają, że zaczyna chodzić od korzenia dokumentu, iterując wszystkie węzły i korzysta z naszej niestandardowej implementacji filtra
    using (var iterator = document.CreateTreeWalker(document, Aspose.Html.Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
    {         
        while (iterator.NextNode() != null)
        {
            // Ponieważ używamy własnego filtra, bieżący węzeł zawsze będzie instancją elementu HTMLImageElement.
            // Nie potrzebujemy tutaj dodatkowych walidacji.
            var image = (Aspose.Html.HTMLImageElement)iterator.CurrentNode;

            System.Console.WriteLine(image.Src);
            // wyjście: obraz1.png
            // wyjście: image2.png
        }
    }
}

Skrobanie sieci przy użyciu zapytania XPath w języku C#

XPath może służyć do wyodrębniania danych z dokumentów HTML. Poniższy fragment kodu wyjaśnia, jak używać kwerendy XPath do skrobania sieci Web w języku C#:

// Przygotuj kod HTML
var code = @"
    <div class='happy'>
        <div>
            <span>Hello!</span>
        </div>
    </div>
    <p class='happy'>
        <span>World</span>
    </p>
";

// Zainicjuj dokument na podstawie przygotowanego kodu
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Tutaj oceniamy wyrażenie XPath, w którym wybieramy wszystkie podrzędne elementy SPAN spośród elementów, których atrybut „class” jest równy „happy”:
    var result = document.Evaluate("//*[@class='happy']//span",
        document,
        null,
        Aspose.Html.Dom.XPath.XPathResultType.Any,
        null);

    // Iteruj po wynikowych węzłach
   for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
    {
        System.Console.WriteLine(node.TextContent);
        // wyjście: Witam
        // wyjście: Świat!
    }
}

Skrobanie stron internetowych za pomocą selektora CSS w języku C#

Możesz utworzyć wzorzec wyszukiwania, aby dopasować elementy w drzewie dokumentu na podstawie składni selektorów CSS. Poniższy fragment kodu wyjaśnia, jak wykonać web scraping za pomocą CSS Selector w C#:

// Przygotuj kod HTML
var code = @"
    <div class='happy'>
        <div>
            <span>Hello</span>
        </div>
    </div>
    <p class='happy'>
        <span>World!</span>
    </p>
";

// Zainicjuj dokument na podstawie przygotowanego kodu
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Tutaj tworzymy selektor CSS, który wyodrębnia wszystkie elementy, których atrybut „class” jest równy „happy” i ich elementy potomne SPAN
    var elements = document.QuerySelectorAll(".happy span");

    // Iteruj po wynikowej liście elementów
    foreach (Aspose.Html.HTMLElement element in elements)
    {
        System.Console.WriteLine(element.InnerHTML);
        // wyjście: Witam
        // wyjście: Świat!
    }
}

Uzyskaj bezpłatną licencję

Możesz poprosić o bezpłatną licencję tymczasową, aby w pełni przetestować interfejs API.

Wniosek

W tym artykule poznałeś bibliotekę skrobania sieci Web w języku C#, Aspose.HTML dla platformy .NET, która zawiera kilka metod tworzenia skrobaka sieci Web w języku C#. Omawia nawigację HTML, zapytania XPath, a także metodę selektora CSS, aby spełnić Twoje wymagania. Jeśli jednak chcesz omówić swoje wątpliwości lub pytania, napisz do nas na forum.

Zobacz też