Web Scraper C#

Webbskrapning, även känd som webbcrawlning, webbskörd eller dataskrapning, används för att extrahera data från webbplatser. En webbskrapa använder olika dataväljare som CSS-väljare, XPath eller båda dessa för att extrahera data från webbsidorna. Båda dessa väljare är effektiva för att samla in och analysera information från webben. Den här artikeln tar upp hur man skapar en webbskrapa i C#, särskilt informationen om HTML-navigering, XPath Query och CSS Selector.

C# Web Scraping Library

Aspose.HTML for .NET är ett webbskrapningsbibliotek som enkelt kan konfigureras genom att ladda ner referens-DLL-filerna från avsnittet New Releases eller köra följande installationskommando NuGet :

PM> Install-Package Aspose.Html

Skapa en webbskrapa i C#

Du kan använda olika egenskaper för klassen Node för att navigera i HTML-dokumenten. Kodavsnittet nedan förklarar hur man navigerar på en HTML-webbsida i C#:

// Förbered HTML-kod
var html_code = "<span>Hello</span> <span>World!</span>";

// Initiera ett dokument från den förberedda koden
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
    // Hämta referensen till det första barnet (första SPANEN) i BODY
    var element = document.Body.FirstChild;
    Console.WriteLine(element.TextContent); // output: Hello

    // Hämta referensen till blanktecken mellan html-element
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: ' '

    // Hämta referensen till det andra SPAN-elementet
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: World!
}

Inspektera HTML med Web Scraper i C#

API:et tillhandahåller också generaliserad användning av elementtraversalfunktioner. Följande kodavsnitt visar hur man utför en detaljerad inspektion av olika delar av API:et.

//Ladda ett dokument från en fil
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");

// Ange sökvägen till HTML-källfilen i ditt lokala filsystem
using (var document = new Aspose.Html.HTMLDocument(documentPath))
{
    // Hämta html-elementet i dokumentet
    var element = document.DocumentElement;                
    Console.WriteLine(element.TagName); // HTML
    
    // Hämta det sista elementet i html-elementet
    element = element.LastElementChild;
    Console.WriteLine(element.TagName); // BODY
    
    // Få det första elementet av kroppselementet
    element = element.FirstElementChild;
    Console.WriteLine(element.TagName); // H1
    Console.WriteLine(element.TextContent); // Header 1     
}

Anpassad filteranvändning för Web Scraper i C#

Du kan implementera ett anpassat filter med ett ITreeWalker eller ett INodeIterator gränssnittsobjekt tillsammans med en anpassad filterimplementering. Följande kodavsnitt förklarar hur du följer processen:

class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
    public override short AcceptNode(Aspose.Html.Dom.Node n)
    {
        // Det aktuella filtret hoppar över alla element, utom IMG-element.
        return string.Equals("img", n.LocalName)
            ? FILTER_ACCEPT
            : FILTER_SKIP;
    }
}

Efter att ha implementerat ett anpassat filter kan du snabbt navigera på en webbsida med följande kod:

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

// Initiera ett dokument baserat på den förberedda koden
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // För att starta HTML-navigering måste vi skapa en instans av TreeWalker.
    // De angivna parametrarna innebär att den börjar gå från roten av dokumentet, itererar alla noder och använder vår anpassade implementering av filtret
    using (var iterator = document.CreateTreeWalker(document, Aspose.Html.Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
    {         
        while (iterator.NextNode() != null)
        {
            // Eftersom vi använder vårt eget filter kommer den aktuella noden alltid att vara en instans av HTMLImageElement.
            // Så vi behöver inte de ytterligare valideringarna här.
            var image = (Aspose.Html.HTMLImageElement)iterator.CurrentNode;

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

Använd XPath Query för att skapa Web Scraper i C#

XPath kan användas för att extrahera data från HTML-dokument. Följande kodavsnitt utvecklar hur du använder XPath Query för webbskrapning i C#:

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

// Initiera ett dokument baserat på den förberedda koden
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Här utvärderar vi XPath-uttrycket där vi väljer alla underordnade SPAN-element från element vars 'class'-attribut är lika med 'happy':
    var result = document.Evaluate("//*[@class='happy']//span",
        document,
        null,
        Aspose.Html.Dom.XPath.XPathResultType.Any,
        null);

    // Iterera över de resulterande noderna
   for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
    {
        System.Console.WriteLine(node.TextContent);
        // utgång: Hej
        // output: Världen!
    }
}

Använd CSS Selector för webbskrapning i C#

Du kan skapa ett sökmönster för att matcha element i ett dokumentträd baserat på CSS Selectors syntax. Kodavsnittet nedan förklarar hur man utför webbskrapning med CSS Selector i C#:

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

// Initiera ett dokument baserat på den förberedda koden
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Här skapar vi en CSS-väljare som extraherar alla element vars "class"-attribut är lika med "happy" och deras underordnade SPAN-element
    var elements = document.QuerySelectorAll(".happy span");

    // Iterera över den resulterande listan med element
    foreach (Aspose.Html.HTMLElement element in elements)
    {
        System.Console.WriteLine(element.InnerHTML);
        // utgång: Hej
        // output: Världen!
    }
}

Få gratis licens

Du kan begära en gratis temporär licens för att utvärdera API:t i dess fulla kapacitet.

Slutsats

I den här artikeln har du lärt dig om C#s webbskrapabibliotek, Aspose.HTML för .NET, som innehåller flera metoder för att skapa en webbskrapa i C#. Den diskuterar HTML-navigering, XPath-fråga samt CSS-väljarmetoder för att uppnå dina krav. Men om du behöver diskutera några av dina problem eller frågor, skriv till oss på forum.

Se även