Volver al blog
Guías
Sorin-Gabriel MaricaLast updated on Mar 31, 20266 min read

¡Crea un rastreador web con C# en solo unos minutos!

¡Crea un rastreador web con C# en solo unos minutos!

La importancia de recopilar información se conoce desde la antigüedad, y quienes la han sabido aprovechar han prosperado.

Hoy en día podemos hacerlo mucho más fácil y rápido utilizando una herramienta de scraping, y crear tu propio scraper tampoco es difícil. La capacidad de recopilar clientes potenciales más rápido, vigilar tanto a la competencia como a tu propia marca y obtener más información antes de invertir en ideas está al alcance de tu mano.

A estas alturas, es posible que ya lo sepas.

Si te interesa saber más sobre el web scraping o cómo crear tu propia herramienta en C#, ¡no te lo pierdas!

Bueno, es legal siempre y cuando el sitio web que desees rastrear esté de acuerdo con ello. Puedes comprobarlo añadiendo «/robots.txt» a su dirección URL, como por ejemplo http://httpbin.org/robots.txt, y leyendo los permisos, o consultando su sección de Términos de Servicio.

¿Qué es el web scraping con C#?

El web scraping es una técnica automatizada que utilizan empresas de todos los tamaños para extraer datos con diversos fines, como la optimización de precios o la recopilación de direcciones de correo electrónico. Los investigadores utilizan el web scraping para recopilar informes de datos y estadísticas, y los desarrolladores obtienen grandes cantidades de datos para el aprendizaje automático. 

¿Cómo funciona? Bueno, en la mayoría de las herramientas de web scraping, lo único que hay que hacer es especificar la URL del sitio web del que se desean extraer datos. Dependiendo de las capacidades del scraper, este extraerá la información de esa página web de forma estructurada, lista para que la analices y manipules como desees. 

Ten en cuenta que algunos scrapers solo analizan el contenido HTML de una página para obtener la información de una página web dinámica. En este caso, se necesita una herramienta de web scraping más sofisticada para completar el trabajo.

Usar un scraper web es muy útil, ya que puede reducir el tiempo que normalmente dedicarías a esta tarea. Copiar y pegar datos manualmente no parece algo divertido de hacer una y otra vez. ¡Piensa en cuánto tiempo llevaría obtener grandes cantidades de datos para entrenar una IA! Si te interesa saber más sobre por qué es útil la extracción de datos, ¡échale un vistazo!  

Veamos cómo podemos crear nuestra herramienta de web scraping en solo unos minutos.

Crear tu propio rastreador web en C#

En este tutorial, te mostraré cómo se puede escribir un scraper web en C#. Sé que utilizar un lenguaje de programación diferente, como Python, puede ser más ventajoso para esta tarea, pero eso no significa que sea imposible hacerlo en C#. 

Programar en C# tiene sus ventajas, como por ejemplo:

  • Es orientado a objetos;
  • Tiene mejor integridad e interoperabilidad;
  • Es multiplataforma;

1. Elegir la página que quieres rastrear

Lo primero es lo primero: tienes que decidir qué página web vas a rastrear. En este ejemplo, voy a rastrear la entrada de Grecia en Wikipedia y ver qué temas aparecen en su índice. Este es un ejemplo sencillo, pero puedes adaptarlo a otras páginas web también.

2. Inspeccionar el código del sitio web

Con las herramientas de desarrollador, puedes inspeccionar cada elemento para comprobar en qué etiqueta se encuentra la información que necesitas. Basta con hacer clic con el botón derecho del ratón en la página web y seleccionar «Inspeccionar», y aparecerá un «Cuadro de inspección del navegador».

Puedes buscar la clase directamente en la sección de elementos o utilizando la herramienta de inspección de la página web, tal y como se muestra a continuación.

Así, has descubierto que los datos que necesitas se encuentran dentro de la etiqueta span que tiene la clase toctext. Lo siguiente que harás es extraer todo el HTML de la página, analizarlo y seleccionar solo los datos dentro de esa clase específica. ¡Hagamos primero algunos preparativos rápidos!

3. Prepara el espacio de trabajo

Puedes utilizar cualquier IDE con el que te sientas cómodo. En este ejemplo, utilizaré Visual Studio Code. También necesitarás instalar el SDK de .NET.

Ahora tienes que crear tu proyecto. Para ello, obviamente tienes que abrir Visual Studio Code. A continuación, irás al menú de extensiones e instalarás C# para Visual Studio Code.

Necesitas un lugar donde escribir y ejecutar nuestro código. En la barra de menús, selecciona Archivo > Abrir archivo (Archivo > Abrir… en macOS) y, en el cuadro de diálogo, crea una carpeta que servirá como nuestro espacio de trabajo.

Una vez creado el espacio de trabajo, puedes crear una plantilla de aplicación sencilla «Hello World» introduciendo el siguiente comando en el terminal de nuestros proyectos:

dotnet new console

Tu nuevo proyecto debería tener este aspecto:

A continuación, debes instalar estos dos paquetes:

  • HtmlAgilityPack es un analizador HTML escrito en C# para leer y escribir DOM.
  • CsvHelper es un paquete que se utiliza para leer y escribir archivos CSV.

Puedes instalarlos utilizando estas líneas de comando en la terminal de tus proyectos:

dotnet add package csvhelper
dotnet add package htmlagilitypack

4. Escribir el código

Importemos los paquetes que hemos instalado hace unos minutos, así como otros paquetes útiles para su uso posterior:

using CsvHelper;
using HtmlAgilityPack;
using System.IO;
using System.Collections.Generic;
using System.Globalization;

Fuera de nuestra función Main, crearás una clase pública para los títulos de tu índice.

public class Row
{
    public string Title {get; set;}
}

Ahora, volviendo a la función Main, debes cargar la página que deseas rastrear. Como mencioné antes, ¡veremos lo que dice Wikipedia sobre Grecia!

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load("https://en.wikipedia.org/wiki/Greece");

Nuestro siguiente paso es analizar y seleccionar los nodos que contienen la información que buscas, que se encuentra en las etiquetas span con la clase toctext.

varHeaderNames = doc.DocumentNode.SelectNodes("//span[@class='toctext']");

¿Qué debes hacer ahora con esta información? Guardémosla en un archivo .csv para usarla más adelante. Para ello, primero debes recorrer cada nodo que hemos extraído anteriormente y guardar su texto en una lista.

CsvHelper se encargará del resto, creando un archivo y escribiendo en él la información extraída.

var titles = new List<Row>();
foreach (var item in HeaderNames)
{
    titles.Add(new Row { Title = item.InnerText});
}
 
using (var writer = new StreamWriter("your_path_here/example.csv"))
using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture))
{
    csv.WriteRecords(titles);
}

5. Ejecutar el código

El código está listo y ahora solo tenemos que ejecutarlo. Utiliza esta línea de comando en el terminal. ¡Asegúrate de haber guardado el archivo primero!

dotnet run

¡Ya está!

Espero que este artículo te haya ayudado a comprender mejor los fundamentos del web scraping con C#.

Es muy útil tener tu propio scraper, pero ten en cuenta que solo puedes extraer una página web a la vez y que aún así tienes que seleccionar manualmente las etiquetas dentro del código HTML del sitio web.

Si quieres extraer datos de varias páginas más, será mucho más rápido usar un extractor que seleccionar la información manualmente, sí, pero no todos los sitios web se pueden extraer con este método. Algunos sitios web son dinámicos, y este ejemplo no extraerá todos sus datos.

¿Has pensado alguna vez en utilizar una herramienta ya preparada y más avanzada que te ayude a extraer datos a gran escala? 

¿Qué tal si echas un vistazo a lo que una API puede hacer por ti? Aquí tienes una guía escrita por WebScrapingAPI para ayudarte a elegir una API que se adapte a tus necesidades.

¡Hasta la próxima!

Acerca del autor
Sorin-Gabriel Marica, Desarrollador full-stack @ WebScrapingAPI
Sorin-Gabriel MaricaDesarrollador full-stack

Sorin Marica es ingeniero Full Stack y DevOps en WebScrapingAPI, donde se encarga de desarrollar funciones para los productos y de mantener la infraestructura que garantiza el buen funcionamiento de la plataforma.

Empieza a crear

¿Estás listo para ampliar tu recopilación de datos?

Únete a más de 2000 empresas que utilizan WebScrapingAPI para extraer datos de la web a escala empresarial sin ningún gasto de infraestructura.