Web Scraping en C#: Tutorial paso a paso en 2025

Anh Tuan
Data Science Expert
23-Jan-2025
¡Tu guía amigable para raspar sitios web, manejar CAPTCHAs e incluso tomar capturas de pantalla!
¿Por qué Web Scraping en C#?
C# no solo sirve para crear aplicaciones o juegos de Windows; ¡también es una potencia para el web scraping! Con bibliotecas como HtmlAgilityPack, Selenium y Puppeteer Sharp, puedes extraer datos, automatizar interacciones e incluso resolver CAPTCHAs (sí, de verdad). En este tutorial, usaremos https://www.scrapethissite.com/pages/ como nuestro campo de pruebas. ¡Vamos a sumergirnos!
Paso 1: Configurando tu proyecto
Primero, crea una nueva aplicación de consola de C#. Luego, instala estos paquetes NuGet:
bash
Install-Package HtmlAgilityPack # Para el análisis HTML
Install-Package Selenium.WebDriver # Para la automatización del navegador
Install-Package PuppeteerSharp # Para capturas de pantalla y raspado avanzado
Install-Package Capsolver.SDK # Para resolver CAPTCHAs
Ejemplo 1: Raspad básico de páginas
Vamos a raspar datos de países desde https://www.scrapethissite.com/pages/simple/.
csharp
using HtmlAgilityPack;
using System.Net;
var url = "https://www.scrapethissite.com/pages/simple/";
var client = new WebClient();
client.Headers.Add("User-Agent", "Mozilla/5.0"); // ¡Sé educado!
var html = client.DownloadString(url);
var doc = new HtmlDocument();
doc.LoadHtml(html);
var countries = doc.DocumentNode.SelectNodes("//div[@class='country']");
foreach (var country in countries)
{
var name = country.SelectSingleNode(".//h3").InnerText.Trim();
var capital = country.SelectSingleNode(".//span[@class='country-capital']").InnerText.Trim();
Console.WriteLine($"País: {name}, Capital: {capital}");
}
Esto imprime todos los países y sus capitales. Sencillo, ¿verdad?
Ejemplo 2: Manejando JavaScript con Selenium
Algunas páginas necesitan un navegador real. Vamos a raspar la página de ejemplo AJAX usando Selenium:
csharp
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
var options = new ChromeOptions();
options.AddArgument("--headless"); // Ejecutar en segundo plano
using var driver = new ChromeDriver(options);
driver.Navigate().GoToUrl("https://www.scrapethissite.com/pages/ajax-javascript/");
var dynamicContent = driver.FindElement(By.CssSelector(".ajax-content")).Text;
Console.WriteLine($"Contenido AJAX: {dynamicContent}");
Ejemplo 3: Resolviendo CAPTCHAs con Capsolver
¿Tienes un CAPTCHA bloqueándote el camino? Usa Capsolver para evitar ReCaptchaV2. Así es como:
- Regístrate en Capsolver, obtén tu clave API.
- Usa la API para resolver un CAPTCHA:
csharp
using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.Text;
using System.Text.Json;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using System.Threading;
namespace CapSolverSeleniumExample
{
class Program
{
static async Task Main(string[] args)
{
string token = await GetCaptchaToken();
using var driver = new ChromeDriver();
driver.Navigate().GoToUrl("https://www.example.com");
Thread.Sleep(5000);
driver.ExecuteScript("document.getElementById('g-recaptcha-response').innerHTML = arguments[0];", token);
var submitButton = driver.FindElement(By.Id("submit-button"));
submitButton.Click();
Thread.Sleep(5000);
driver.Quit();
}
static async Task<string> GetCaptchaToken()
{
string apiKey = "YOUR_API_KEY";
string siteKey = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_kl-";
string siteUrl = "https://www.example.com";
using var client = new HttpClient();
var payload = new
{
clientKey = apiKey,
task = new
{
type = "ReCaptchaV3TaskProxyLess",
websiteKey = siteKey,
websiteURL = siteUrl,
pageAction = "login"
}
};
var requestContent = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json");
var createTaskResponse = await client.PostAsync("https://api.capsolver.com/createTask", requestContent);
var createTaskResponseString = await createTaskResponse.Content.ReadAsStringAsync();
using var createTaskJsonDoc = JsonDocument.Parse(createTaskResponseString);
var root = createTaskJsonDoc.RootElement;
if (!root.TryGetProperty("taskId", out var taskIdElement))
{
Console.WriteLine("Error al crear la tarea: " + createTaskResponseString);
return null;
}
int taskId = taskIdElement.GetInt32();
while (true)
{
await Task.Delay(1000);
var resultPayload = new { clientKey = apiKey, taskId = taskId };
var resultContent = new StringContent(JsonSerializer.Serialize(resultPayload), Encoding.UTF8, "application/json");
var getTaskResponse = await client.PostAsync("https://api.capsolver.com/getTaskResult", resultContent);
var getTaskResponseString = await getTaskResponse.Content.ReadAsStringAsync();
using var getTaskJsonDoc = JsonDocument.Parse(getTaskResponseString);
var resultRoot = getTaskJsonDoc.RootElement;
if (resultRoot.TryGetProperty("status", out var statusElement))
{
string status = statusElement.GetString();
if (status == "ready")
{
if (resultRoot.TryGetProperty("solution", out var solutionElement) && solutionElement.TryGetProperty("gRecaptchaResponse", out var tokenElement))
{
return tokenElement.GetString();
}
return null;
}
if (status == "failed" || resultRoot.TryGetProperty("errorId", out _))
{
Console.WriteLine("¡Solución fallida! respuesta: " + getTaskResponseString);
return null;
}
}
}
}
}
}
Funciona perfectamente con Selenium para automatizar formularios con muchos CAPTCHAs!
Ejemplo 4: Tomando capturas de pantalla con Puppeteer Sharp
¿Quieres una prueba visual de tu raspado? Captura una captura de pantalla:
csharp
using PuppeteerSharp;
await new BrowserFetcher().DownloadAsync();
using var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = true });
using var page = await browser.NewPageAsync();
await page.GoToAsync("https://www.scrapethissite.com/pages/javascript/");
await page.ScreenshotAsync("screenshot.png");
Perfecto para depurar o archivar páginas.
Consejos profesionales para el Web Scraping 2025
- Respeta robots.txt: Consulta https://www.scrapethissite.com/robots.txt primero.
- Limitación de velocidad: Agrega retrasos con
Thread.Sleep(2000)para evitar sobrecargar los servidores. - Rotación de User-Agent: Imita navegadores reales para evitar la detección.
- Manejo de errores: Envuelve el código en bloques
try-catchpara problemas de red.
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

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

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

Cómo resolver Captcha en Maxun con integración de CapSolver
Una guía práctica para integrar CapSolver con Maxun para el scraping de web en el mundo real. Aprende cómo manejar reCAPTCHA, Cloudflare Turnstile y sitios protegidos por CAPTCHA utilizando flujos de trabajo de pre-autenticación y robot.

Adélia Cruz
21-Jan-2026

Cómo resolver Captcha en Browser4 con integración de CapSolver
Automatización de Browser4 con alta capacidad de procesamiento combinada con CapSolver para el manejo de desafíos CAPTCHA en la extracción de datos web a gran escala.

Aloísio Vítor
21-Jan-2026

Mejores Herramientas de Extracción de Datos para Usar en 2026 (Comparación Completa)
Descubre las mejores herramientas de extracción de datos para 2026. Compara las mejores plataformas de web scraping, ETL e impulsadas por IA para automatizar tu recolección de datos y flujos de trabajo de IA.

Nikolai Smirnov
21-Jan-2026

