CAPSOLVER
Blog
Extracción de datos web en C#: Tutorial paso a paso en 2025

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

Logo of CapSolver

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 Copy
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 Copy
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 Copy
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:

  1. Regístrate en Capsolver, obtén tu clave API.
  2. Usa la API para resolver un CAPTCHA:
csharp Copy
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 Copy
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

  1. Respeta robots.txt: Consulta https://www.scrapethissite.com/robots.txt primero.
  2. Limitación de velocidad: Agrega retrasos con Thread.Sleep(2000) para evitar sobrecargar los servidores.
  3. Rotación de User-Agent: Imita navegadores reales para evitar la detección.
  4. Manejo de errores: Envuelve el código en bloques try-catch para 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

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

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

Maxun con integración de CapSolver
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.

web scraping
Logo of CapSolver

Adélia Cruz

21-Jan-2026

Browser4 con integración de CapSolver
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.

web scraping
Logo of CapSolver

Aloísio Vítor

21-Jan-2026

Principales Herramientas de Extracción de Datos para Usar en 2026 (Comparación Completa)
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.

AI
Logo of CapSolver

Nikolai Smirnov

21-Jan-2026