CAPSOLVER
Blog
Cómo usar RestSharp (biblioteca C#) para la extracción de datos web

Cómo usar RestSharp (biblioteca C#) para raspar la web

Logo of CapSolver

Ethan Collins

Pattern Recognition Specialist

17-Sep-2024

La extracción de datos web es una técnica esencial para extraer datos de sitios web, pero las aplicaciones web modernas a menudo implementan medidas de seguridad como los desafíos CAPTCHA para evitar el acceso automatizado. Los desafíos CAPTCHA, como Google reCAPTCHA, están diseñados para diferenciar entre usuarios humanos y bots, lo que dificulta que los scripts automatizados extraigan contenido de manera efectiva.

Para superar estos obstáculos, los desarrolladores pueden aprovechar herramientas y servicios que simplifican las solicitudes HTTP y manejan la resolución de CAPTCHA. RestSharp es una biblioteca C# potente y fácil de usar que simplifica el proceso de realizar solicitudes HTTP a API RESTful. Cuando se combina con un analizador HTML como HtmlAgilityPack, se convierte en una solución robusta para tareas de extracción de datos web.

RestSharp WebScraping

Sin embargo, encontrar desafíos CAPTCHA durante la extracción puede detener el proceso de automatización. Aquí es donde Capsolver entra en juego. Capsolver ofrece soluciones basadas en API para resolver CAPTCHAs programáticamente, lo que permite que sus scripts de extracción de datos ignoren estos desafíos y accedan al contenido deseado sin problemas.

En esta guía completa, te guiaremos a través de:

Extracción de datos web con RestSharp

En C#, RestSharp es una biblioteca popular para manejar solicitudes HTTP e interactuar con API RESTful. Simplifica muchos aspectos de la comunicación HTTP en comparación con el HttpClient incorporado. Puedes combinar RestSharp con un analizador HTML como HtmlAgilityPack para extraer datos de páginas web.

Prerrequisitos

  • Instala la biblioteca RestSharp utilizando NuGet Package Manager:

    bash Copy
    Install-Package RestSharp
  • Instala la biblioteca HtmlAgilityPack para ayudar a analizar el contenido HTML:

    bash Copy
    Install-Package HtmlAgilityPack
  • Instala Newtonsoft.Json para manejar respuestas JSON:

    bash Copy
    Install-Package Newtonsoft.Json

Ejemplo: Extraer datos de "Quotes to Scrape"

Vamos a extraer frases del sitio web Quotes to Scrape utilizando RestSharp y HtmlAgilityPack.

csharp Copy
using System;
using System.Threading.Tasks;
using HtmlAgilityPack;
using RestSharp;

class Program
{
    static async Task Main(string[] args)
    {
        string url = "http://quotes.toscrape.com/";

        // Inicializa el cliente RestSharp
        var client = new RestClient(url);

        // Crea una solicitud GET
        var request = new RestRequest(Method.GET);

        // Ejecuta la solicitud
        var response = await client.ExecuteAsync(request);

        if (response.IsSuccessful)
        {
            // Analiza el contenido de la página utilizando HtmlAgilityPack
            HtmlDocument htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(response.Content);

            // Encuentra todas las frases en la página
            var quotes = htmlDoc.DocumentNode.SelectNodes("//span[@class='text']");

            // Imprime cada frase
            foreach (var quote in quotes)
            {
                Console.WriteLine(quote.InnerText);
            }
        }
        else
        {
            Console.WriteLine($"No se pudo recuperar la página. Código de estado: {response.StatusCode}");
        }
    }
}

Explicación:

  • Cliente y solicitud RestSharp: Inicializa un RestClient con la URL de destino y crea un RestRequest para el método GET.
  • Ejecución de la solicitud: Envía la solicitud de forma asíncrona y verifica si la respuesta es exitosa.
  • HtmlAgilityPack: Analiza el contenido HTML de la respuesta y extrae frases seleccionando elementos con la clase text.

Resolver reCAPTCHA v2 y reCAPTCHA v3 con Capsolver utilizando RestSharp

Cuando un sitio web utiliza reCAPTCHA v2 o v3 para seguridad, puedes resolver el CAPTCHA utilizando la API Capsolver. A continuación, se muestra cómo puedes integrar Capsolver con RestSharp para resolver desafíos reCAPTCHA.

Prerrequisitos

  • Newtonsoft.Json se utiliza para manejar el análisis JSON de las respuestas de Capsolver:

    bash Copy
    Install-Package Newtonsoft.Json

Ejemplo: Resolver reCAPTCHA v2 con Capsolver

En esta sección, demostraremos cómo resolver desafíos reCAPTCHA v2 utilizando la API Capsolver y RestSharp.

csharp Copy
using System;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;

class Program
{
    private static readonly string apiUrl = "https://api.capsolver.com";
    private static readonly string clientKey = "YOUR_API_KEY"; // Reemplaza con tu clave API de Capsolver

    static async Task Main(string[] args)
    {
        try
        {
            // Paso 1: Crea una tarea para resolver reCAPTCHA v2
            string taskId = await CreateTask();
            Console.WriteLine("ID de la tarea: " + taskId);

            // Paso 2: Recupera el resultado de la tarea
            string taskResult = await GetTaskResult(taskId);
            Console.WriteLine("Resultado de la tarea (token CAPTCHA): " + taskResult);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
    }

    // Método para crear una nueva tarea de resolución de CAPTCHA
    private static async Task<string> CreateTask()
    {
        // Inicializa el cliente RestSharp
        var client = new RestClient(apiUrl);

        // Carga útil de la solicitud
        var requestBody = new
        {
            clientKey = clientKey,
            task = new
            {
                type = "ReCaptchaV2TaskProxyLess", // Tipo de tarea para reCAPTCHA v2 sin proxy
                websiteURL = "https://www.example.com", // La URL del sitio web para resolver CAPTCHA
                websiteKey = "SITE_KEY_HERE" // Clave del sitio reCAPTCHA
            }
        };

        // Crea una solicitud POST
        var request = new RestRequest("createTask", Method.POST);
        request.AddJsonBody(requestBody);

        // Ejecuta la solicitud
        var response = await client.ExecuteAsync(request);

        if (!response.IsSuccessful)
        {
            throw new Exception("No se pudo crear la tarea: " + response.Content);
        }

        JObject jsonResponse = JObject.Parse(response.Content);
        if (jsonResponse["errorId"].ToString() != "0")
        {
            throw new Exception("Error al crear la tarea: " + jsonResponse["errorDescription"]);
        }

        // Devuelve el ID de la tarea para usar en el siguiente paso
        return jsonResponse["taskId"].ToString();
    }

    // Método para recuperar el resultado de una tarea de resolución de CAPTCHA
    private static async Task<string> GetTaskResult(string taskId)
    {
        // Inicializa el cliente RestSharp
        var client = new RestClient(apiUrl);

        // Carga útil de la solicitud
        var requestBody = new
        {
            clientKey = clientKey,
            taskId = taskId
        };

        // Crea una solicitud POST
        var request = new RestRequest("getTaskResult", Method.POST);
        request.AddJsonBody(requestBody);

        // Consulta el resultado de la tarea cada 5 segundos
        while (true)
        {
            var response = await client.ExecuteAsync(request);

            if (!response.IsSuccessful)
            {
                throw new Exception("No se pudo obtener el resultado de la tarea: " + response.Content);
            }

            JObject jsonResponse = JObject.Parse(response.Content);
            if (jsonResponse["errorId"].ToString() != "0")
            {
                throw new Exception("Error al obtener el resultado de la tarea: " + jsonResponse["errorDescription"]);
            }

            // Si la tarea está lista, devuelve el token CAPTCHA
            if (jsonResponse["status"].ToString() == "ready")
            {
                return jsonResponse["solution"]["gRecaptchaResponse"].ToString();
            }

            // Espera 5 segundos antes de volver a consultar
            Console.WriteLine("La tarea aún se está procesando, esperando 5 segundos...");
            await Task.Delay(5000);
        }
    }
}

Explicación:

  1. Método CreateTask:

    • Cliente y solicitud RestSharp: Inicializa un RestClient y crea un RestRequest para el punto final createTask con el método POST.
    • Carga útil de la solicitud: Configura los parámetros necesarios, incluidos clientKey, websiteURL, websiteKey y especifica el tipo de tarea como ReCaptchaV2TaskProxyLess.
    • Ejecución: Envía la solicitud y analiza la respuesta para recuperar el taskId.
  2. Método GetTaskResult:

    • Cliente y solicitud RestSharp: Inicializa un RestClient y crea un RestRequest para el punto final getTaskResult con el método POST.
    • Consulta: Consulta continuamente el estado de la tarea cada 5 segundos hasta que se complete (estado: ready).
    • Recuperación de resultados: Una vez que la tarea está lista, extrae el gRecaptchaResponse, que se puede utilizar para omitir el CAPTCHA.

Ejemplo: Resolver reCAPTCHA v3 con Capsolver

En esta sección, demostraremos cómo resolver desafíos reCAPTCHA v3 utilizando la API Capsolver y RestSharp.

csharp Copy
using System;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using RestSharp;

class Program
{
    private static readonly string apiUrl = "https://api.capsolver.com";
    private static readonly string clientKey = "YOUR_API_KEY"; // Reemplaza con tu clave API de Capsolver

    static async Task Main(string[] args)
    {
        try
        {
            // Paso 1: Crea una tarea para resolver reCAPTCHA v3
            string taskId = await CreateTask();
            Console.WriteLine("ID de la tarea: " + taskId);

            // Paso 2: Recupera el resultado de la tarea
            string taskResult = await GetTaskResult(taskId);
            Console.WriteLine("Resultado de la tarea (token CAPTCHA): " + taskResult);
        }
        catch (Exception ex)
        {
            Console.WriteLine("Error: " + ex.Message);
        }
    }

    // Método para crear una nueva tarea de resolución de CAPTCHA
    private static async Task<string> CreateTask()
    {
        // Inicializa el cliente RestSharp
        var client = new RestClient(apiUrl);

        // Carga útil de la solicitud
        var requestBody = new
        {
            clientKey = clientKey,
            task = new
            {
                type = "ReCaptchaV3TaskProxyLess", // Tipo de tarea para reCAPTCHA v3 sin proxy
                websiteURL = "https://www.example.com", // La URL del sitio web para resolver CAPTCHA
                websiteKey = "SITE_KEY_HERE", // Clave del sitio reCAPTCHA
                minScore = 0.3, // Puntuación mínima deseada
                pageAction = "your_action" // Nombre de la acción definido en el sitio
            }
        };

        // Crea una solicitud POST
        var request = new RestRequest("createTask", Method.POST);
        request.AddJsonBody(requestBody);

        // Ejecuta la solicitud
        var response = await client.ExecuteAsync(request);

        if (!response.IsSuccessful)
        {
            throw new Exception("No se pudo crear la tarea: " + response.Content);
        }

        JObject jsonResponse = JObject.Parse(response.Content);
        if (jsonResponse["errorId"].ToString() != "0")
        {
            throw new Exception("Error al crear la tarea: " + jsonResponse["errorDescription"]);
        }

        // Devuelve el ID de la tarea para usar en el siguiente paso
        return jsonResponse["taskId"].ToString();
    }

    // Método para recuperar el resultado de una tarea de resolución de CAPTCHA
    private static async Task<string> GetTaskResult(string taskId)
    {
        // Inicializa el cliente RestSharp
        var client = new RestClient(apiUrl);

        // Carga útil de la solicitud
        var requestBody = new
        {
            clientKey = clientKey,
            taskId = taskId
        };

        // Crea una solicitud POST
        var request = new RestRequest("getTaskResult", Method.POST);
        request.AddJsonBody(requestBody);

        // Consulta el resultado de la tarea cada 5 segundos
        while (true)
        {
            var response = await client.ExecuteAsync(request);

            if (!response.IsSuccessful)
            {
                throw new Exception("No se pudo obtener el resultado de la tarea: " + response.Content);
            }

            JObject jsonResponse = JObject.Parse(response.Content);
            if (jsonResponse["errorId"].ToString() != "0")
            {
                throw new Exception("Error al obtener el resultado de la tarea: " + jsonResponse["errorDescription"]);
            }

            // Si la tarea está lista, devuelve el token CAPTCHA
            if (jsonResponse["status"].ToString() == "ready")
            {
                return jsonResponse["solution"]["gRecaptchaResponse"].ToString();
            }

            // Espera 5 segundos antes de volver a consultar
            Console.WriteLine("La tarea aún se está procesando, esperando 5 segundos...");
            await Task.Delay(5000);
        }
    }
}

Explicación:

  1. Método CreateTask:

    • Cliente y solicitud RestSharp: Configura un RestClient y RestRequest para el punto final createTask.
    • Carga útil de la solicitud: Incluye parámetros adicionales como minScore y pageAction específicos de reCAPTCHA v3.
    • Ejecución: Envía la solicitud y recupera el taskId.
  2. Método GetTaskResult:

    • Similar al ejemplo v2, consulta la API Capsolver para obtener el resultado de la tarea y recupera el token CAPTCHA una vez que la tarea está lista.

Mejores prácticas para la extracción de datos web en C#

Al utilizar herramientas de extracción de datos web en C#, sigue siempre estas mejores prácticas:

  • Respeta robots.txt: Asegúrate de que el sitio web permita la extracción de datos web comprobando el archivo robots.txt.
  • Limitación de frecuencia: Evita hacer demasiadas solicitudes en un corto período de tiempo para evitar ser bloqueado por el sitio web.
  • Rotación de proxies: Utiliza proxies para distribuir solicitudes a través de múltiples IPs para evitar ser marcado como un bot.
  • Cabeceras de suplantación: Simula solicitudes similares a las de un navegador agregando encabezados personalizados, como User-Agent, a tus solicitudes HTTP.

Conclusión

Utilizando RestSharp para la extracción de datos web y Capsolver para la resolución de CAPTCHA, puedes automatizar de forma eficaz las interacciones con sitios web que emplean desafíos CAPTCHA. Asegúrate siempre de que tus actividades de extracción de datos web cumplan con los términos de servicio y los requisitos legales del sitio web de destino.

¡Feliz extracción!


Aviso de Cumplimiento: La información proporcionada en este blog es solo para fines informativos. CapSolver se compromete a cumplir con todas las leyes y regulaciones aplicables. El uso de la red de CapSolver para actividades ilegales, fraudulentas o abusivas está estrictamente prohibido y será investigado. Nuestras soluciones para la resolución de captcha mejoran la experiencia del usuario mientras garantizan un 100% de cumplimiento al ayudar a resolver las dificultades de captcha durante el rastreo de datos públicos. Fomentamos el uso responsable de nuestros servicios. Para obtener más información, visite nuestros Términos de Servicio y Política de Privacidad.

Máse

Herramientas de Scraping de Datos Instantáneas: Formas Rápidas para Extraer Datos de la Web Sin Código
Herramientas de Scraping de Datos Instantáneo: Formas Rápidas para Extraer Datos de la Web Sin Código

Descubre las mejores herramientas de scraping para 2026. Aprende formas rápidas de extraer datos de la web sin código usando las mejores extensiones y APIs para la extracción automatizada.

web scraping
Logo of CapSolver

Rajinder Singh

28-Jan-2026

Raspado de Web Artículos de Noticias
Raspado Web de Artículos de Noticias con Python (Guía para 2026)

Domina el scraping web de artículos de noticias con Python en 2026. Aprende a resolver reCAPTCHA v2/v3 con CapSolver y construye pipelines de datos escalables.

web scraping
Logo of CapSolver

Adélia Cruz

28-Jan-2026

Browser Use vs Browserbase: ¿Cuál es la mejor herramienta de automatización de navegadores para agentes de IA?
Uso del navegador vs Browserbase: ¿Cuál es la mejor herramienta de automatización de navegadores para agentes de IA?

Comparar el uso del navegador vs Browserbase para la automatización de agentes de IA. Descubre características, precios y cómo resolver CAPTCHAs con CapSolver para flujos de trabajo sin interrupciones.

AI
Logo of CapSolver

Adélia Cruz

27-Jan-2026

Top 10 de Escrapers sin Código para Usar en 2026
Top 10 Scrapers sin código para usar en 2026

Una lista curada de las mejores herramientas de scraping web sin código para usar en 2026. Comparar scrapers con inteligencia artificial, plataformas visuales de punto y clic, precios, ventajas y desventajas, y casos de uso del mundo real.

web scraping
Logo of CapSolver

Adélia Cruz

27-Jan-2026

Top 9 Marcos de Trabajo de Agentes de IA en 2026
Top 9 Marcos de Agentes de Inteligencia Artificial en 2026

Explora los 9 principales frameworks de agentes de IA para 2026, incluyendo CrewAI, AutoGen y LangGraph. Aprende cómo elegir el mejor framework para la orquestación de agentes multiagente y el desarrollo de agentes autónomos, y descubre herramientas esenciales para la interacción en el mundo real.

AI
Logo of CapSolver

Ethan Collins

26-Jan-2026

Baneos de IP en 2026: Cómo funcionan y Formas prácticas de evadirlos
Bloqueos de IP en 2026: Cómo funcionan y Formas prácticas de evadirlos

Aprende cómo evitar el bloqueo de IP en 2026 con nuestro guía completa. Descubre técnicas modernas de bloqueo de IP y soluciones prácticas como proxies residenciales y resolutores de CAPTCHA.

web scraping
Logo of CapSolver

Rajinder Singh

26-Jan-2026