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

Elevar la Automatización Empresarial:
Elevando la Automatización Empresarial: Infraestructura Potenciada por LLM para un Reconocimiento de CAPTCHA Sin Problemas & Eficiencia Operativa

Descubre cómo la infraestructura de automatización de IA impulsada por LLM revoluciona el reconocimiento de CAPTCHA, mejorando la eficiencia de los procesos de negocio y reduciendo la intervención manual. Optimiza tus operaciones automatizadas con soluciones avanzadas de verificación.

ai
Logo of CapSolver

Adélia Cruz

30-Mar-2026

Escalar la recopilación de datos para el entrenamiento de LLM: Resolver CAPTCHAs a gran escala
Recopilación de Datos a Gran Escala para el Entrenamiento de GML: Resolver CAPTCHAs a Gran Escala

Aprende a escalar la recopilación de datos para el entrenamiento de modelos de lenguaje grandes resolviendo CAPTCHAs a gran escala. Descubre estrategias automatizadas para construir conjuntos de datos de alta calidad para modelos de IA.

AI
Logo of CapSolver

Sora Fujimoto

27-Mar-2026

Solucionar el error de Cloudflare 1005: Guía de scraping web y soluciones
Solucionar el error de Cloudflare 1005: Guía y soluciones de scraping web

Aprende a solucionar el error de Cloudflare 1005 acceso denegado durante el scraping de web. Descubre soluciones como proxies residenciales, fingerprinting del navegador y CapSolver para CAPTCHA. Optimiza tu extracción de datos.

Cloudflare
Logo of CapSolver

Sora Fujimoto

27-Mar-2026

Abrir navegador Usando CapSolver
Cómo resolver CAPTCHA en OpenBrowser usando CapSolver (Guía de automatización de Agente de IA)

Resolver CAPTCHA en OpenBrowser usando CapSolver. Automatizar reCAPTCHA, Turnstile y más para agentes de IA fácilmente.

AI
Logo of CapSolver

Adélia Cruz

26-Mar-2026

HyperBrowser con CapSolver
Cómo resolver cualquier CAPTCHA en HyperBrowser usando CapSolver (Guía completa de configuración)

Resuelve cualquier CAPTCHA en HyperBrowser usando CapSolver. Automatiza reCAPTCHA, Turnstile, AWS WAF y más fácilmente.

AI
Logo of CapSolver

Aloísio Vítor

26-Mar-2026

Cómo resolver reCAPTCHA v2 con Python y API
Cómo resolver reCAPTCHA v2 Python y API

Aprende a resolver reCAPTCHA v2 usando Python y API. Este guía completa cubre métodos con y sin proxy con código listo para producción para automatización.

reCAPTCHA
Logo of CapSolver

Aloísio Vítor

25-Mar-2026