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

Cómo encontrar la pageAction para reCaptcha versión 2 y 3
Aprende a identificar el parámetro pageAction requerido por reCaptcha al usar la extensión CapSolver.

Adélia Cruz
11-Nov-2025

Cómo identificar y enviar parámetros adicionales de reCAPTCHA (v2/v3/Enterprise) | Guía de CapSolver
Aprende a detectar y enviar parámetros adicionales de reCAPTCHA usando CapSolver para mejorar la precisión y resolver desafíos complejos.

Emma Foster
10-Nov-2025

Cómo resolver reCAPTCHA al realizar el raspado de resultados de búsqueda con Puppeteer
Dominar el arte de la extracción de datos con Puppeteer al aprender a resolver de manera confiable reCAPTCHA v2 y v3. Descubra las mejores técnicas para resolver reCAPTCHA con Puppeteer para la extracción a gran escala de datos y la automatización de SEO.

Adélia Cruz
06-Nov-2025
![Cómo resolver reCaptcha v2 usando Selenium [Python] con la extensión Capsolver](https://assets.capsolver.com/prod/posts/solve-recaptcha-with-selenium-python/9df0c69facb932640c0dd4d2cfa69bbf.jpg)
Cómo resolver reCAPTCHA V2 usando Selenium [Python] con la extensión de CapSolver
Aprende a resolver de manera fluida reCaptcha v2 con Selenium Python y la extensión Capsolver, un guía detallada sobre cómo configurar y automatizar soluciones de captcha de manera efectiva

Adélia Cruz
05-Nov-2025

¿Qué es la recopilación de datos: últimas noticias sobre scraping web en 2024?
Aprende todo sobre la recolección de datos — desde los métodos de scraping web y aplicaciones del mundo real hasta superar barreras CAPTCHA usando CapSolver. Descubre cómo recopilar, limpiar y analizar datos valiosos de sitios web, documentos y conjuntos de datos de manera eficiente.

Adélia Cruz
04-Nov-2025

Cómo resolver Cloudflare en 2025: Resolver Cloudflare Turnstile y desafío usando CapSolver
Explorar el Desafío de Cloudflare y el CAPTCHA de Turnstile y aprender a evitarlos utilizando CapSolver, navegadores automatizados y proxies de alta calidad. Incluye ejemplos prácticos de Python y Node.js para resolver CAPTCHA de forma fluida en tareas de automatización.

Adélia Cruz
03-Nov-2025

