Web Scraper C#

Il web scraping, noto anche come web crawling, web harvesting o data scraping, viene utilizzato per estrarre i dati dai siti web. Un web scraper utilizza diversi selettori di dati come selettori CSS, XPath o entrambi per estrarre i dati dalle pagine web. Entrambi questi selettori sono efficienti per la raccolta e l’analisi delle informazioni dal web. Questo articolo illustra come creare un web scraper in C#, in particolare le informazioni sulla navigazione HTML, XPath Query e CSS Selector.

Configurazione della libreria di scraping Web C#

Aspose.HTML per .NET è una libreria di scraping Web che può essere facilmente configurata scaricando i file DLL di riferimento dalla sezione Nuove versioni o eseguendo il comando di installazione NuGet seguente :

PM> Install-Package Aspose.Html

Scraping Web con navigazione HTML in C#

Puoi usare diverse proprietà della classe Node per navigare nei documenti HTML. Il frammento di codice seguente spiega come navigare in una pagina Web HTML in C#:

// Prepara il codice HTML
var html_code = "<span>Hello</span> <span>World!</span>";

// Inizializzare un documento dal codice preparato
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
    // Ottieni il riferimento al primo figlio (primo SPAN) del CORPO
    var element = document.Body.FirstChild;
    Console.WriteLine(element.TextContent); // output: Hello

    // Ottieni il riferimento allo spazio bianco tra gli elementi html
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: ' '

    // Ottieni il riferimento al secondo elemento SPAN
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: World!
}

Ispezione del documento HTML e dei suoi elementi

L’API fornisce anche l’utilizzo generalizzato delle funzionalità di attraversamento degli elementi. Il frammento di codice seguente mostra come eseguire un’ispezione dettagliata di diversi elementi dell’API.

//Carica un documento da un file
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");

// Specificare il percorso del file HTML di origine nel file system locale
using (var document = new Aspose.Html.HTMLDocument(documentPath))
{
    // Ottieni l'elemento html del documento
    var element = document.DocumentElement;                
    Console.WriteLine(element.TagName); // HTML
    
    // Ottieni l'ultimo elemento dell'elemento html
    element = element.LastElementChild;
    Console.WriteLine(element.TagName); // BODY
    
    // Ottieni il primo elemento dell'elemento body
    element = element.FirstElementChild;
    Console.WriteLine(element.TagName); // H1
    Console.WriteLine(element.TextContent); // Header 1     
}

Utilizzo del filtro personalizzato per Web Scraper in C#

Puoi implementare un filtro personalizzato utilizzando un oggetto interfaccia ITreeWalker o INodeIterator insieme a un’implementazione di filtro personalizzata. Il seguente frammento di codice spiega come seguire il processo:

class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
    public override short AcceptNode(Aspose.Html.Dom.Node n)
    {
        // Il filtro corrente salta tutti gli elementi, ad eccezione degli elementi IMG.
        return string.Equals("img", n.LocalName)
            ? FILTER_ACCEPT
            : FILTER_SKIP;
    }
}

Dopo aver implementato un filtro personalizzato, puoi navigare rapidamente in una pagina web con il seguente codice:

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

// Inizializzare un documento in base al codice preparato
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Per avviare la navigazione HTML è necessario creare un'istanza di TreeWalker.
    // I parametri specificati indicano che inizia a camminare dalla radice del documento, iterando tutti i nodi e utilizzando la nostra implementazione personalizzata del filtro
    using (var iterator = document.CreateTreeWalker(document, Aspose.Html.Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
    {         
        while (iterator.NextNode() != null)
        {
            // Poiché stiamo usando il nostro filtro, il nodo corrente sarà sempre un'istanza di HTMLImageElement.
            // Quindi, non abbiamo bisogno di ulteriori convalide qui.
            var image = (Aspose.Html.HTMLImageElement)iterator.CurrentNode;

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

Scraping Web utilizzando la query XPath in C#

XPath può essere utilizzato per estrarre dati da documenti HTML. Il frammento di codice seguente illustra come utilizzare XPath Query per lo scraping Web in C#:

// Prepara il codice HTML
var code = @"
    <div class='happy'>
        <div>
            <span>Hello!</span>
        </div>
    </div>
    <p class='happy'>
        <span>World</span>
    </p>
";

// Inizializzare un documento in base al codice preparato
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Qui valutiamo l'espressione XPath in cui selezioniamo tutti gli elementi SPAN figlio da elementi il cui attributo 'class' è uguale a 'happy':
    var result = document.Evaluate("//*[@class='happy']//span",
        document,
        null,
        Aspose.Html.Dom.XPath.XPathResultType.Any,
        null);

    // Iterare sui nodi risultanti
    for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
    {
        System.Console.WriteLine(node.TextContent);
        // uscita: Ciao
        // uscita: Mondo!
    }
}

Web scraping con CSS Selector in C#

Puoi creare un modello di ricerca per abbinare gli elementi in un albero del documento basato sulla sintassi dei selettori CSS. Il frammento di codice seguente spiega come eseguire lo scraping web con CSS Selector in C#:

// Prepara il codice HTML
var code = @"
    <div class='happy'>
        <div>
            <span>Hello</span>
        </div>
    </div>
    <p class='happy'>
        <span>World!</span>
    </p>
";

// Inizializzare un documento in base al codice preparato
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Qui creiamo un selettore CSS che estrae tutti gli elementi il cui attributo 'class' è uguale a 'happy' e i loro elementi SPAN figlio
    var elements = document.QuerySelectorAll(".happy span");

    // Iterare sull'elenco di elementi risultante
    foreach (Aspose.Html.HTMLElement element in elements)
    {
        System.Console.WriteLine(element.InnerHTML);
        // uscita: Ciao
        // uscita: Mondo!
    }
}

Ottieni licenza gratuita

Puoi richiedere una licenza temporanea gratuita per valutare l’API nella sua piena capacità.

Conclusione

In questo articolo, hai imparato a conoscere la libreria di scraping Web C#, Aspose.HTML per .NET, che include diversi metodi per creare uno scraper Web in C#. Discute la navigazione HTML, la query XPath e il metodo di selezione CSS per soddisfare i tuoi requisiti. Tuttavia, nel caso in cui dovessi discutere di qualsiasi tuo dubbio o domanda, scrivici al forum.

Guarda anche