Rascador web C#

Web Scraping, también conocido como rastreo web, recolección web o raspado de datos, se utiliza para extraer datos de sitios web. Un raspador web utiliza diferentes selectores de datos como selectores CSS, XPath o ambos para extraer datos de las páginas web. Ambos selectores son eficientes para recopilar y analizar información de la web. Este artículo cubre cómo crear un web scraper en C#, específicamente la información sobre la navegación HTML, XPath Query y CSS Selector.

Configuración de la biblioteca de raspado web de C#

Aspose.HTML for .NET es una biblioteca de web scraping que se puede configurar fácilmente descargando los archivos DLL de referencia de la sección Nuevas versiones, o ejecutando el siguiente comando de instalación NuGet :

PM> Install-Package Aspose.Html

Web Scraping con navegación HTML en C#

Puede usar diferentes propiedades de la clase Node para navegar por los documentos HTML. El fragmento de código siguiente explica cómo navegar por una página web HTML en C#:

// Preparar código HTML
var html_code = "<span>Hello</span> <span>World!</span>";

// Inicializar un documento a partir del código preparado
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
    // Obtenga la referencia al primer hijo (primer SPAN) del CUERPO
    var element = document.Body.FirstChild;
    Console.WriteLine(element.TextContent); // output: Hello

    // Obtenga la referencia al espacio en blanco entre los elementos html
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: ' '

    // Obtener la referencia al segundo elemento SPAN
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: World!
}

Inspección del Documento HTML y sus Elementos

La API también proporciona el uso generalizado de funciones transversales de elementos. El siguiente fragmento de código demuestra cómo realizar una inspección detallada de diferentes elementos de la API.

//Cargar un documento desde un archivo
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");

// Especifique la ruta al archivo HTML de origen en su sistema de archivos local
using (var document = new Aspose.Html.HTMLDocument(documentPath))
{
    // Obtener el elemento html del documento
    var element = document.DocumentElement;                
    Console.WriteLine(element.TagName); // HTML
    
    // Obtener el último elemento del elemento html
    element = element.LastElementChild;
    Console.WriteLine(element.TagName); // BODY
    
    // Obtener el primer elemento del elemento del cuerpo.
    element = element.FirstElementChild;
    Console.WriteLine(element.TagName); // H1
    Console.WriteLine(element.TextContent); // Header 1     
}

Uso de filtros personalizados para Web Scraper en C#

Puede implementar un filtro personalizado mediante un objeto de interfaz ITreeWalker o INodeIterator junto con una implementación de filtro personalizado. El siguiente fragmento de código explica cómo seguir el proceso:

class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
    public override short AcceptNode(Aspose.Html.Dom.Node n)
    {
        // El filtro actual omite todos los elementos, excepto los elementos IMG.
        return string.Equals("img", n.LocalName)
            ? FILTER_ACCEPT
            : FILTER_SKIP;
    }
}

Después de implementar un filtro personalizado, puede navegar rápidamente por una página web con el siguiente código:

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

// Inicializar un documento basado en el código preparado
using (var document = new Aspose.Html.HTMLDocument(code, "."))
{
    // Para iniciar la navegación HTML necesitamos crear una instancia de TreeWalker.
    // Los parámetros especificados significan que comienza a caminar desde la raíz del documento, itera todos los nodos y usa nuestra implementación personalizada del filtro.
    using (var iterator = document.CreateTreeWalker(document, Aspose.Html.Dom.Traversal.Filters.NodeFilter.SHOW_ALL, new OnlyImageFilter()))
    {         
        while (iterator.NextNode() != null)
        {
            // Como estamos usando nuestro propio filtro, el nodo actual siempre será una instancia de HTMLImageElement.
            // Por lo tanto, no necesitamos las validaciones adicionales aquí.
            var image = (Aspose.Html.HTMLImageElement)iterator.CurrentNode;

            System.Console.WriteLine(image.Src);
            // salida: imagen1.png
            // salida: imagen2.png
        }
    }
}

Web Scraping usando XPath Query en C#

XPath se puede utilizar para extraer datos de documentos HTML. El siguiente fragmento de código explica cómo usar XPath Query para web scraping en C#:

Web Scraping con CSS Selector en C#

Puede crear un patrón de búsqueda para hacer coincidir los elementos de un árbol de documentos según la sintaxis de los selectores de CSS. El fragmento de código a continuación explica cómo realizar web scraping con CSS Selector en C#:

Obtenga una licencia gratis

Puede solicitar una licencia temporal gratuita para evaluar la API en toda su capacidad.

Conclusión

En este artículo, ha aprendido acerca de la biblioteca de raspado web de C#, Aspose.HTML for .NET, que incluye varios métodos para crear un raspado web en C#. Analiza la navegación HTML, la consulta XPath y el método de selección de CSS para cumplir con sus requisitos. Sin embargo, en caso de que necesite discutir alguna de sus inquietudes o preguntas, escríbanos al foro.

Ver también