IRONSOFTWAREHOME

How to Scrape Data from Websites in C#

Curtis Chau
Curtis Chau
Updated: 9 de mayo de 2026

IronWebScraper es una librería .NET para web scraping, extracción de datos web y análisis de contenido web. Es una biblioteca fácil de usar que se puede agregar a proyectos de Microsoft Visual Studio para su uso en desarrollo y producción.

IronWebScraper tiene muchas características y capacidades únicas como controlar las páginas permitidas y prohibidas, objetos, medios, etc. También permite la gestión de múltiples identidades, caché web y muchas otras características que cubriremos en este tutorial.

Comience con IronWebScraper

Start using IronWebScraper in your project today with a free trial.

Primer Paso:
arrow pointer

Público objetivo

Este tutorial está dirigido a desarrolladores de software con habilidades de programación básicas o avanzadas, que deseen construir e implementar soluciones para capacidades avanzadas de scraping (scraping de sitios web, recopilación y extracción de datos de sitios web, análisis de contenidos de sitios web, recolección web).

Imagen de Raspado Web

Habilidades requeridas

  1. Fundamentos básicos de programación con habilidades en uno de los lenguajes de programación de Microsoft, como C# o VB.NET
  2. Comprensión básica de las tecnologías web (HTML, JavaScript, JQuery, CSS, etc.) y su funcionamiento
  3. Conocimiento básico de DOM, XPath, selectores HTML y CSS

Herramientas

  1. Microsoft Visual Studio 2010 o superior
  2. Extensiones para desarrolladores web para navegadores como inspector web para Chrome o Firebug para Firefox

¿Por qué raspar? (Reasons and Concepts)

Si desea construir un producto o solución que tenga las capacidades de:

  1. Extraer datos de sitios web
  2. Comparar contenidos, precios, características, etc. de múltiples sitios web
  3. Escanear y almacenar en caché contenido web

Si tienes una o más razones de las anteriores, entonces IronWebScraper es una gran biblioteca para cumplir con tus necesidades

¿Cómo instalar IronWebScraper?

Después de Create a New Project (Ver Apéndice A) puedes agregar la biblioteca IronWebScraper a tu proyecto insertando automáticamente la biblioteca usando NuGet o instalando manualmente el DLL.

Instalar usando NuGet

Para agregar la biblioteca IronWebScraper a nuestro proyecto usando NuGet, podemos hacerlo usando la interfaz visual (Administrador de paquetes NuGet) o mediante comando usando la Consola del Administrador de Paquetes.

Uso del Administrador de paquetes NuGet

  1. Usando el ratón -> clic derecho en el nombre del proyecto -> Seleccionar administrar paquete NuGet
  2. Desde la pestaña de exploración -> busca IronWebScraper -> Instala
  3. Hacer clic en Ok
  4. Y hemos terminado

Uso de la consola de paquetes NuGet

  1. Desde herramientas -> Administrador de Paquetes NuGet -> Consola del Administrador de Paquetes
  2. Elegir Proyecto de Biblioteca de Clases como Proyecto Predeterminado
  3. Ejecuta el comando -> Install-Package IronWebScraper

Instalar manualmente

  1. Ir a https://ironsoftware.com

  2. Hacer clic en IronWebScraper o visitar su página directamente usando URL https://ironsoftware.com/csharp/webscraper/

  3. Hacer clic en Descargar DLL.

  4. Extraer el archivo comprimido descargado

  5. En Visual Studio, clic derecho en el proyecto -> agregar -> referencia -> examinar

    Agregar IronWebScraper Usando DLL

  6. Ve a la carpeta extraída -> netstandard2.0 -> y selecciona todos los archivos .dll

    Agregar IronWebScraper Usando DLL 2

  7. ¡Y está hecho!

HelloScraper: Nuestra primera muestra de IronWebScraper

Como siempre, comenzaremos implementando la aplicación Hello Scraper para dar nuestro primer paso usando IronWebScraper.

  • Hemos creado una nueva aplicación de consola con el nombre "IronWebScraperSample"

Pasos para crear una muestra de IronWebScraper

  1. Crear una carpeta y nombrarla "HelloScraperSample"

  2. Luego añade una nueva clase y nómbrala HelloScraper HelloScraper Agregar Clase

  3. Agrega este fragmento de código a HelloScraper

    public class HelloScraper : WebScraper
    {
        /// <summary>
        /// Override this method to initialize your web scraper.
        /// Important tasks will be to request at least one start URL and set allowed/banned domain or URL patterns.
        /// </summary>
        public override void Init()
        {
            License.LicenseKey = "LicenseKey"; // Write License Key
            this.LoggingLevel = WebScraper.LogLevel.All; // Log all events
            this.Request("https://blog.scrapinghub.com", Parse); // Initialize a web request to the given URL
        }
    
        /// <summary>
        /// Override this method to create the default Response handler for your web scraper.
        /// If you have multiple page types, you can add additional similar methods.
        /// </summary>
        /// <param name="response">The HTTP Response object to parse</param>
        public override void Parse(Response response)
        {
            // Set working directory for the project
            this.WorkingDirectory = AppSetting.GetAppRoot() + @"\HelloScraperSample\Output\";
            // Loop on all links
            foreach (var titleLink in response.Css("h2.entry-title a"))
            {
                // Read link text
                string title = titleLink.TextContentClean;
                // Save result to file
                Scrape(new ScrapedData() { { "Title", title } }, "HelloScraper.json");
            }
    
            // Loop on all links for pagination
            if (response.CssExists("div.prev-post > a[href]"))
            {
                // Get next page URL
                var nextPage = response.Css("div.prev-post > a[href]")[0].Attributes["href"];
                // Scrape next URL
                this.Request(nextPage, Parse);
            }
        }
    }
  4. Ahora para iniciar el scraping, agrega este fragmento de código a Main

    static void Main(string[] args)
    {
        // Create Object From Hello Scrape class
        HelloScraperSample.HelloScraper scrape = new HelloScraperSample.HelloScraper();
        // Start Scraping
        scrape.Start();
    }
  5. El resultado se guardará en un archivo con el formato WebScraper.WorkingDirectory/classname.Json HelloScraper Resultado

Descripción general del código

Scrape.Start() activa la lógica de scraping de la siguiente manera:

  1. Llama al método Init() para iniciar variables, propiedades de scraping y atributos de comportamiento.
  2. Configura la solicitud de la página de inicio en Init() con Request("https://blog.scrapinghub.com", Parse).
  3. Maneja múltiples solicitudes HTTP e hilos en paralelo, manteniendo el código sincrónico y más fácil de depurar.
  4. El método Parse() se activa después de Init() para manejar la respuesta, extrayendo datos usando selectores CSS y guardándolos en formato JSON.

Funciones y opciones de la biblioteca IronWebScraper

La documentación actualizada se puede encontrar dentro del archivo zip descargado con el método de instalación manual (IronWebScraper Documentation.chm File), o puedes consultar la documentación en línea para la última actualización de la biblioteca en https://ironsoftware.com/csharp/webscraper/object-reference/.

Para comenzar a usar IronWebScraper en tu proyecto debes heredar de la clase IronWebScraper.WebScraper, que extiende tu biblioteca de clases y agrega funcionalidad de scraping a ella. Además, debes implementar los métodos Init() y Parse(Response response).

namespace IronWebScraperEngine
{
    public class NewsScraper : IronWebScraper.WebScraper
    {
        public override void Init()
        {
            throw new NotImplementedException();
        }

        public override void Parse(Response response)
        {
            throw new NotImplementedException();
        }
    }
}
Propiedades \ funcionesTipoDescripción
Init ()MétodoUtilizado para configurar el scraper
Parse (Response response)MétodoUsado para implementar la lógica que usará el scraper y cómo la procesará. Puede implementar múltiples métodos para diferentes comportamientos o estructuras de página.
BannedUrls, AllowedUrls, BannedDomainsColeccionesUsado para prohibir/permitir URLs y/o dominios. Ej: BannedUrls.Add("*.zip", "*.exe", "*.gz", "*.pdf"); Soporta comodines y expresiones regulares.
ObeyRobotsDotTxtBooleanoSe utiliza para habilitar o deshabilitar la lectura y seguimiento de las directivas en robots.txt.
ObeyRobotsDotTxtForHost (string Host)MétodoSe utiliza para habilitar o deshabilitar la lectura y seguimiento de las directivas en robots.txt para un dominio determinado.
Scrape, ScrapeUniqueMétodo
ThrottleModeEnumeraciónOpciones Enum: ByIpAddress, ByDomainHostName. Permite la limitación inteligente de solicitudes, respetuosa de direcciones IP de host o nombres de dominio.
EnableWebCache, EnableWebCache (TimeSpan cacheDuration)MétodoPermite el almacenamiento en caché para solicitudes web.
MaxHttpConnectionLimitIntEstablece el número total de solicitudes HTTP abiertas permitidas (hilos).
RateLimitPerHostTimeSpanEstablece el mínimo retraso (pausa) cortés entre solicitudes a un determinado dominio o dirección IP.
OpenConnectionLimitPerHostIntEstablece el número permitido de solicitudes HTTP concurrentes (hilos) por nombre de host o dirección IP.
WorkingDirectorystringEstablece una ruta de directorio de trabajo para almacenar datos.

Ejemplos y prácticas del mundo real

Rastreando un sitio web de películas en línea

Construyamos un ejemplo en el que scrapeemos un sitio web de películas.

Agrega una nueva clase y nómbrala MovieScraper:

Agregar Clase MovieScraper

Estructura HTML

Esta es una parte del HTML de la página de inicio que vemos en el sitio web:

<div id="movie-featured" class="movies-list movies-list-full tab-pane in fade active">
    <div data-movie-id="20746" class="ml-item">
        <a href="https://website.com/film/king-arthur-legend-of-the-sword-20746/">
            <span class="mli-quality">CAM</span>
            <img data-original="https://img.gocdn.online/2017/05/16/poster/2116d6719c710eabe83b377463230fbe-king-arthur-legend-of-the-sword.jpg" 
                 class="lazy thumb mli-thumb" alt="King Arthur: Legend of the Sword"
                  src="https://img.gocdn.online/2017/05/16/poster/2116d6719c710eabe83b377463230fbe-king-arthur-legend-of-the-sword.jpg" 
                 style="display: inline-block;">
            <span class="mli-info"><h2>King Arthur: Legend of the Sword</h2></span>
        </a>
    </div>
    <div data-movie-id="20724" class="ml-item">
        <a href="https://website.com/film/snatched-20724/" >
            <span class="mli-quality">CAM</span>
            <img data-original="https://img.gocdn.online/2017/05/16/poster/5ef66403dc331009bdb5aa37cfe819ba-snatched.jpg" 
                 class="lazy thumb mli-thumb" alt="Snatched" 
                 src="https://img.gocdn.online/2017/05/16/poster/5ef66403dc331009bdb5aa37cfe819ba-snatched.jpg" 
                 style="display: inline-block;">
            <span class="mli-info"><h2>Snatched</h2></span>
        </a>
    </div>
</div>
HTML

Como podemos ver, tenemos un ID de película, título y enlace a una página detallada. Empecemos a recopilar estos datos:

public class MovieScraper : WebScraper
{
    public override void Init()
    {
        License.LicenseKey = "LicenseKey";
        this.LoggingLevel = WebScraper.LogLevel.All;
        this.WorkingDirectory = AppSetting.GetAppRoot() + @"\MovieSample\Output\";
        this.Request("www.website.com", Parse);
    }

    public override void Parse(Response response)
    {
        foreach (var div in response.Css("#movie-featured > div"))
        {
            if (div.GetAttribute("class") != "clearfix")
            {
                var movieId = div.GetAttribute("data-movie-id");
                var link = div.Css("a")[0];
                var movieTitle = link.TextContentClean;
                Scrape(new ScrapedData() { { "MovieId", movieId }, { "MovieTitle", movieTitle } }, "Movie.Jsonl");
            }
        }           
    }
}

Clase de cine estructurada

Para mantener nuestros datos formateados, implementemos una clase de película:

public class Movie
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string URL { get; set; }
}

Ahora actualiza nuestro código para usar la clase Movie:

public class MovieScraper : WebScraper
{
    public override void Init()
    {
        License.LicenseKey = "LicenseKey";
        this.LoggingLevel = WebScraper.LogLevel.All;
        this.WorkingDirectory = AppSetting.GetAppRoot() + @"\MovieSample\Output\";
        this.Request("https://website.com/", Parse);
    }

    public override void Parse(Response response)
    {
        foreach (var div in response.Css("#movie-featured > div"))
        {
            if (div.GetAttribute("class") != "clearfix")
            {
                var movie = new Movie
                {
                    Id = Convert.ToInt32(div.GetAttribute("data-movie-id")),
                    Title = div.Css("a")[0].TextContentClean,
                    URL = div.Css("a")[0].Attributes["href"]
                };
                Scrape(movie, "Movie.Jsonl");
            }
        }
    }
}

Extracción detallada de páginas

Extendamos nuestra clase Movie para tener nuevas propiedades para la información detallada:

public class Movie
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string URL { get; set; }
    public string Description { get; set; }
    public List<string> Genre { get; set; }
    public List<string> Actor { get; set; }
}

Luego navegue a la página detallada para extraerlo, utilizando las capacidades extendidas de IronWebScraper:

public class MovieScraper : WebScraper
{
    public override void Init()
    {
        License.LicenseKey = "LicenseKey";
        this.LoggingLevel = WebScraper.LogLevel.All;
        this.WorkingDirectory = AppSetting.GetAppRoot() + @"\MovieSample\Output\";
        this.Request("https://domain/", Parse);
    }

    public override void Parse(Response response)
    {
        foreach (var div in response.Css("#movie-featured > div"))
        {
            if (div.GetAttribute("class") != "clearfix")
            {
                var movie = new Movie
                {
                    Id = Convert.ToInt32(div.GetAttribute("data-movie-id")),
                    Title = div.Css("a")[0].TextContentClean,
                    URL = div.Css("a")[0].Attributes["href"]
                };
                this.Request(movie.URL, ParseDetails, new MetaData() { { "movie", movie } });
            }
        }           
    }

    public void ParseDetails(Response response)
    {
        var movie = response.MetaData.Get<Movie>("movie");
        var div = response.Css("div.mvic-desc")[0];
        movie.Description = div.Css("div.desc")[0].TextContentClean;
        movie.Genre = div.Css("div > p > a").Select(element => element.TextContentClean).ToList();
        movie.Actor = div.Css("div > p:nth-child(2) > a").Select(element => element.TextContentClean).ToList();

        Scrape(movie, "Movie.Jsonl");
    }
}

Características de la biblioteca IronWebScraper

Función HttpIdentity

Algunos sistemas requieren que el usuario inicie sesión para ver el contenido; usa HttpIdentity para credenciales:

HttpIdentity id = new HttpIdentity
{
    NetworkUsername = "username",
    NetworkPassword = "pwd"
};
Identities.Add(id);

Habilitar caché web

Almacenar páginas en caché para reutilizar durante el desarrollo:

public override void Init()
{
    License.LicenseKey = "LicenseKey";
    this.LoggingLevel = WebScraper.LogLevel.All;
    this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
    EnableWebCache();
    this.Request("http://www.WebSite.com", Parse);
}

Estrangulamiento

Controlar el número de conexiones y la velocidad:

public override void Init()
{
    License.LicenseKey = "LicenseKey";
    this.LoggingLevel = WebScraper.LogLevel.All;
    this.WorkingDirectory = AppSetting.GetAppRoot() + @"\ShoppingSiteSample\Output\";
    this.MaxHttpConnectionLimit = 80;
    this.RateLimitPerHost = TimeSpan.FromMilliseconds(50);
    this.OpenConnectionLimitPerHost = 25;
    this.ObeyRobotsDotTxt = false;
    this.ThrottleMode = Throttle.ByDomainHostName;
    this.Request("https://www.Website.com", Parse);
}

Propiedades de estrangulamiento

  • MaxHttpConnectionLimit
    número total de solicitudes HTTP permitidas abiertas (hilos)
  • RateLimitPerHost
    retardo mínimo educado (pausa) entre las solicitudes a un dominio o dirección IP dada
  • OpenConnectionLimitPerHost
    número permitido de solicitudes HTTP concurrentes (hilos) por nombre de host o dirección IP
  • ThrottleMode
    Hace que el WebScraper limite inteligentemente las solicitudes no solo por nombre de host, sino también por direcciones IP de los servidores host. Esto es cortés en caso de que múltiples dominios extraídos estén alojados en la misma máquina.

Apéndice

¿Cómo crear una aplicación de Windows Form?

Use Visual Studio 2013 o superior.

  1. Abre Visual Studio.

  2. Archivo -> Nuevo -> Proyecto Enterprise 2015

  3. Elija Visual C# o VB -> Windows -> Aplicación de formularios de Windows. Crear Aplicación de Windows

Nombre del Proyecto: IronScraperSample
Ubicación: Seleccione una ubicación en su disco.

¿Cómo crear una aplicación de formulario web ASP.NET?

  1. Abre Visual Studio. Enterprise 2015

  2. Archivo -> Nuevo -> Proyecto Archivo Nuevo Proyecto

  3. Elija Visual C# o VB -> Web -> Aplicación web ASP.NET (.NET Framework). Aplicación Web ASP .NET

Nombre del Proyecto: IronScraperSample
Ubicación: Seleccione una ubicación en su disco.

  1. Desde sus plantillas ASP.NET, seleccione una plantilla vacía y marque Formularios Web. Plantillas ASP .NET

  2. Su proyecto básico de Formulario Web ASP.NET está creado. Proyecto de Formulario Web ASP .NET

Descargar el proyecto de código de muestra de tutorial completo aquí.

Preguntas Frecuentes

¿Cómo extraer datos de sitios web en C#?

Puedes usar IronWebScraper para extraer datos de sitios web en C#. Comienza instalando la librería a través de NuGet y establece una aplicación de consola básica para comenzar a extraer datos web eficientemente.

¿Cuáles son los requisitos para el web scraping en C#?

Para realizar web scraping en C#, debes tener habilidades básicas de programación en C# o VB.NET, y entender tecnologías web como HTML, JavaScript y CSS, junto con familiaridad con DOM, XPath y selectores CSS.

¿Cómo puedo instalar una librería de web scraping en un proyecto .NET?

Para instalar IronWebScraper en un proyecto .NET, usa la consola del administrador de paquetes NuGet con el comando Install-Package IronWebScraper o navega a través de la interfaz del Administrador de Paquetes NuGet en Visual Studio.

¿Cómo puedo implementar la limitación de solicitudes en mi web scraper?

IronWebScraper te permite implementar la limitación de solicitudes para gestionar la frecuencia de las solicitudes realizadas a un servidor. Esto se puede configurar usando configuraciones como MaxHttpConnectionLimit, RateLimitPerHost y OpenConnectionLimitPerHost.

¿Cuál es el propósito de habilitar la caché web en el web scraping?

Habilitar la caché web en el web scraping ayuda a reducir el número de solicitudes enviadas a un servidor almacenando y reutilizando respuestas anteriores. Esto se puede configurar en IronWebScraper usando el método EnableWebCache.

¿Cómo se puede manejar la autenticación en el web scraping?

Con IronWebScraper, puedes usar HttpIdentity para gestionar la autenticación, permitiendo el acceso a contenido detrás de formularios de inicio de sesión o áreas restringidas, lo que habilita el scraping de recursos protegidos.

¿Cuál es un ejemplo simple de un web scraper en C#?

El 'HelloScraper' es un ejemplo simple proporcionado en el tutorial. Demuestra cómo configurar un web scraper básico usando IronWebScraper, incluyendo cómo iniciar solicitudes y analizar respuestas.

¿Cómo puedo extender mi web scraper para manejar estructuras de páginas complejas?

Usando IronWebScraper, puedes extender tu scraper para manejar estructuras de páginas complejas personalizando los métodos Parse para procesar diferentes tipos de páginas, permitiendo estrategias flexibles de extracción de datos.

¿Cuáles son los beneficios de usar una librería de web scraping?

Usar una librería de web scraping como IronWebScraper ofrece beneficios como extracción de datos simplificada, gestión de dominios, limitación de solicitudes, almacenamiento en caché y soporte para autenticación, lo que permite un manejo eficiente de tareas de web scraping.

How can developers extend the functionality of IronWebScraper for specific data extraction needs?

Developers can inherit from the IronWebScraper.WebScraper class to extend functionality and implement custom data extraction logic by overriding methods like Init() and Parse(Response response).

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien estructurados y visualmente atractivos.

...
Leer más

¿Listo para empezar?

Nuget Downloads 143,929Versión:2026.9recién lanzado

Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta
Biblioteca C# NuGet para PDF
Instalar con NuGet

Versión: 2026.9

PM > Install-Package IronWebScraper
nuget.org/packages/IronWebScraper/
  1. En el Explorador de Soluciones, haga clic derecho en Referencias, Administrar Paquetes NuGet
  2. Selecciona Examinar y busca "IronWebScraper"
  3. Seleccione el paquete e instale
C# PDF DLL
Descargar DLL

Versión: 2026.9

  1. Descarga y descomprime IronWebScraper en una ubicación como ~/Libs dentro de tu directorio de Solución
  2. En Visual Studio Solution Explorer, haz clic derecho en Referencias. Selecciona Examinar, "IronWebScraper.dll"

Licencias desde $999

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta