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

Reconocimiento de imágenes con IA: Conceptos básicos y cómo resolverlo
Reconocimiento de Imágenes con IA: Conceptos Básicos y Cómo Resolverlo

Dile con adiós a las dificultades de los CAPTCHA de imagen – ¡El motor de visión de CapSolver las resuelve de forma rápida, inteligente y sin problemas!

Logo of CapSolver

Aloísio Vítor

25-Apr-2025

Los Mejores User Agents para Web Scraping y Cómo Usarlos
Los mejores agentes de usuario para web scraping y cómo usarlos

Una guía sobre los mejores agentes de usuario para web scraping y su uso efectivo para evitar la detección. Explore la importancia de los agentes de usuario, sus tipos y cómo implementarlos para un web scraping fluido e indetectable.

Logo of CapSolver

Aloísio Vítor

07-Mar-2025

Cómo resolver el desafío Cloudflare JS para web scraping y automatización
Cómo resolver el desafío Cloudflare JS para web scraping y automatización

Aprende a resolver el desafío JavaScript de Cloudflare para un web scraping y automatización sin problemas. Descubre estrategias efectivas, incluyendo el uso de navegadores headless, rotación de proxies y el aprovechamiento de las capacidades avanzadas de resolución de CAPTCHA de CapSolver.

Cloudflare
Logo of CapSolver

Aloísio Vítor

05-Mar-2025

Huellas dactilares TLS de Cloudflare: Qué son y cómo solucionarlas
Huellas dactilares TLS de Cloudflare: Qué son y cómo solucionarlas

Aprenda sobre el uso de la huella digital TLS de Cloudflare para la seguridad, cómo detecta y bloquea bots, y explore métodos efectivos para solucionarlo para tareas de raspado web y navegación automatizada.

Cloudflare
Logo of CapSolver

Aloísio Vítor

28-Feb-2025

¿Por qué me siguen pidiendo que verifique que no soy un robot?
¿Por qué sigo teniendo que verificar que no soy un robot?

Aprenda por qué Google le solicita que verifique que no es un robot y explore soluciones como el uso de la API de CapSolver para resolver los desafíos de CAPTCHA de manera eficiente.

Logo of CapSolver

Aloísio Vítor

27-Feb-2025

Cómo extraer datos de un sitio web protegido por Cloudflare
Cómo extraer datos de un sitio web protegido por Cloudflare

En esta guía, exploraremos técnicas éticas y efectivas para extraer datos de sitios web protegidos por Cloudflare.

Cloudflare
Logo of CapSolver

Aloísio Vítor

20-Feb-2025