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

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.

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:
- Extraer sitios web utilizando RestSharp y HtmlAgilityPack.
- Resolver desafíos reCAPTCHA utilizando la API Capsolver.
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:
bashInstall-Package RestSharp -
Instala la biblioteca HtmlAgilityPack para ayudar a analizar el contenido HTML:
bashInstall-Package HtmlAgilityPack -
Instala Newtonsoft.Json para manejar respuestas JSON:
bashInstall-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
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
RestClientcon la URL de destino y crea unRestRequestpara 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:
bashInstall-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
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:
-
Método CreateTask:
- Cliente y solicitud RestSharp: Inicializa un
RestClienty crea unRestRequestpara el punto finalcreateTaskcon el método POST. - Carga útil de la solicitud: Configura los parámetros necesarios, incluidos
clientKey,websiteURL,websiteKeyy especifica el tipo de tarea comoReCaptchaV2TaskProxyLess. - Ejecución: Envía la solicitud y analiza la respuesta para recuperar el
taskId.
- Cliente y solicitud RestSharp: Inicializa un
-
Método GetTaskResult:
- Cliente y solicitud RestSharp: Inicializa un
RestClienty crea unRestRequestpara el punto finalgetTaskResultcon 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.
- Cliente y solicitud RestSharp: Inicializa un
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
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:
-
Método CreateTask:
- Cliente y solicitud RestSharp: Configura un
RestClientyRestRequestpara el punto finalcreateTask. - Carga útil de la solicitud: Incluye parámetros adicionales como
minScoreypageActionespecíficos de reCAPTCHA v3. - Ejecución: Envía la solicitud y recupera el
taskId.
- Cliente y solicitud RestSharp: Configura un
-
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 archivorobots.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á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.

Rajinder Singh
28-Jan-2026

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.

Adélia Cruz
28-Jan-2026

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.

Adélia Cruz
27-Jan-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.

Adélia Cruz
27-Jan-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.

Ethan Collins
26-Jan-2026

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.

Rajinder Singh
26-Jan-2026

