Web Scraper C#

Web Scraping, také známý jako procházení webu, sklizeň webu nebo škrábání dat, se používá k extrahování dat z webových stránek. Webový škrabák používá různé selektory dat, jako jsou selektory CSS, XPath nebo oba, aby extrahoval data z webových stránek. Oba tyto selektory jsou účinné pro sběr a analýzu informací z webu. Tento článek popisuje, jak vytvořit webový škrabák v C#, konkrétně informace o HTML navigaci, XPath Query a CSS Selector.

Knihovna C# Web Scraping

Aspose.HTML for .NET je webová knihovna scraping, kterou lze snadno nakonfigurovat stažením referenčních souborů DLL ze sekce New Releases nebo spuštěním následujícího instalačního příkazu NuGet :

PM> Install-Package Aspose.Html

Vytvořte Web Scraper v C#

K navigaci v dokumentech HTML můžete použít různé vlastnosti třídy Node. Níže uvedený fragment kódu vysvětluje, jak procházet webovou stránkou HTML v C#:

// Připravte HTML kód
var html_code = "<span>Hello</span> <span>World!</span>";

// Inicializujte dokument z připraveného kódu
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
    // Získejte odkaz na prvního potomka (první rozpětí) TĚLA
    var element = document.Body.FirstChild;
    Console.WriteLine(element.TextContent); // output: Hello

    // Získejte odkaz na mezery mezi prvky html
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: ' '

    // Získejte odkaz na druhý prvek SPAN
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: World!
}

Kontrola HTML pomocí Web Scraper v C#

API také poskytuje obecné použití funkcí procházení prvků. Následující fragment kódu ukazuje, jak provést podrobnou kontrolu různých prvků rozhraní API.

//Načtěte dokument ze souboru
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");

// Zadejte cestu ke zdrojovému souboru HTML ve vašem lokálním systému souborů
using (var document = new Aspose.Html.HTMLDocument(documentPath))
{
    // Získejte html prvek dokumentu
    var element = document.DocumentElement;                
    Console.WriteLine(element.TagName); // HTML
    
    // Získejte poslední prvek prvku html
    element = element.LastElementChild;
    Console.WriteLine(element.TagName); // BODY
    
    // Získejte první prvek prvku těla
    element = element.FirstElementChild;
    Console.WriteLine(element.TagName); // H1
    Console.WriteLine(element.TextContent); // Header 1     
}

Použití vlastního filtru pro Web Scraper v C#

Vlastní filtr můžete implementovat pomocí objektu rozhraní ITreeWalker nebo INodeIterator spolu s implementací vlastního filtru. Následující fragment kódu vysvětluje, jak postupovat v tomto procesu:

class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
    public override short AcceptNode(Aspose.Html.Dom.Node n)
    {
        // Aktuální filtr přeskočí všechny prvky kromě prvků IMG.
        return string.Equals("img", n.LocalName)
            ? FILTER_ACCEPT
            : FILTER_SKIP;
    }
}

Po implementaci vlastního filtru můžete rychle procházet webovou stránkou pomocí následujícího kódu:

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

// Inicializujte dokument na základě připraveného kódu
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Pro spuštění HTML navigace potřebujeme vytvořit instanci TreeWalker.
    // Zadané parametry znamenají, že začne chodit z kořenového adresáře dokumentu, iteruje všechny uzly a použije naši vlastní implementaci filtru
    using (var iterator = document.CreateTreeWalker(document, Aspose.Html.Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
    {         
        while (iterator.NextNode() != null)
        {
            // Protože používáme vlastní filtr, aktuální uzel bude vždy instancí HTMLImageElement.
            // Zde tedy nepotřebujeme další ověření.
            var image = (Aspose.Html.HTMLImageElement)iterator.CurrentNode;

            System.Console.WriteLine(image.Src);
            // výstup: image1.png
            // výstup: image2.png
        }
    }
}

Použijte XPath Query k vytvoření Web Scraper v C#

XPath lze použít k extrahování dat z dokumentů HTML. Následující fragment kódu vysvětluje, jak používat XPath Query pro web scraping v C#:

// Připravte si HTML kód
var code = @"
    <div class='happy'>
        <div>
            <span>Hello!</span>
        </div>
    </div>
    <p class='happy'>
        <span>World</span>
    </p>
";

// Inicializujte dokument na základě připraveného kódu
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Zde vyhodnotíme výraz XPath, kde vybereme všechny podřízené prvky SPAN z prvků, jejichž atribut 'class' se rovná 'happy':
    var result = document.Evaluate("//*[@class='happy']//span",
        document,
        null,
        Aspose.Html.Dom.XPath.XPathResultType.Any,
        null);

    // Iterujte přes výsledné uzly
   for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
    {
        System.Console.WriteLine(node.TextContent);
        // výstup: Dobrý den
        // výstup: Svět!
    }
}

Použijte CSS Selector pro Web Scraping v C#

Můžete vytvořit vyhledávací vzor, který bude odpovídat prvkům ve stromu dokumentu na základě syntaxe selektorů CSS. Níže uvedený úryvek kódu vysvětluje, jak provádět stírání webu pomocí CSS Selector v C#:

// Připravte si HTML kód
var code = @"
    <div class='happy'>
        <div>
            <span>Hello</span>
        </div>
    </div>
    <p class='happy'>
        <span>World!</span>
    </p>
";

// Inicializujte dokument na základě připraveného kódu
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Zde vytvoříme selektor CSS, který extrahuje všechny prvky, jejichž atribut 'class' se rovná 'happy' a jejich podřízené prvky SPAN
    var elements = document.QuerySelectorAll(".happy span");

    // Iterujte výsledný seznam prvků
    foreach (Aspose.Html.HTMLElement element in elements)
    {
        System.Console.WriteLine(element.InnerHTML);
        // výstup: Dobrý den
        // výstup: Svět!
    }
}

Získejte bezplatnou licenci

Můžete požádat o bezplatnou dočasnou licenci k vyhodnocení plné kapacity API.

Závěr

V tomto článku jste se dozvěděli o knihovně webového škrabání v jazyce C#, Aspose.HTML for .NET, která obsahuje několik metod pro vytvoření webové škrabky v C#. Pojednává o HTML navigaci, XPath Query a také o metodách výběru CSS pro dosažení vašich požadavků. Pokud však potřebujete prodiskutovat jakékoli své obavy nebo otázky, napište nám na fórum.

Viz také