Volver al blog
Guías
Suciu Dan12 de octubre de 20226 min de lectura

¡Web Scraper con C# en sólo unos minutos!

¡Web Scraper con C# en sólo unos minutos!

Bueno, es legal siempre y cuando el sitio web que deseas scrapear esté de acuerdo con ello. Puedes comprobarlo añadiendo "/robots.txt" a su dirección URL como en http://httpbin.org/robots.txt y leyendo los permisos, o consultando su sección de TOS.

¿Qué es el web scraping con c sharp?

El web scraping es una técnica automatizada utilizada por empresas de todos los tamaños para extraer datos con diversos fines, como la optimización de precios o la recopilación de correos electrónicos. 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, para la mayoría de las herramientas de web scraping, todo lo que tienes que hacer es especificar la URL de la página web de la que deseas extraer datos. Dependiendo de las capacidades del scraper, extraerá la información de esa página web de forma estructurada, lista para que la analices y manipules como quieras. 

Hay que tener en cuenta que algunos scrapers sólo miran el contenido HTML de una página para ver la información de una página web dinámica. En este caso, se necesita una herramienta de raspado web más sofisticada para completar el trabajo.

Utilizar un raspador web es muy útil, ya que puede reducir la cantidad de 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 lo que costaría obtener grandes cantidades de datos para entrenar a una IA. Si quieres saber más sobre la utilidad de la extracción de datos, échale un vistazo.  

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

Crea tu propio raspador web en C#

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

Codificar en C# tiene sus ventajas, como:

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

1. Elegir la página que desea raspar

Lo primero es lo primero, tienes que decidir qué página web vas a raspar. En este ejemplo, voy a raspar Grecia en Wikipedia y ver qué temas se presentan en su Tabla de Contenidos. Se trata de un ejemplo sencillo, pero también puedes escalarlo a otras páginas web.

2. Inspección del código del sitio web

Con las herramientas de desarrollo, puedes inspeccionar cada elemento para comprobar bajo qué etiqueta está la información que necesitas. Basta con hacer clic con el botón derecho en la página web y seleccionar "inspeccionar", y aparecerá un "Cuadro de inspección del navegador".

Panel «Elementos» de Chrome DevTools que muestra el código HTML de un elemento de la lista de contenidos

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

Información sobre el elemento en DevTools de Chrome sobre una entrada del índice de Wikipedia

Así, descubriste que los datos que necesitas se encuentran dentro de la etiqueta span que tiene la clase toctext. Lo que harás a continuación es extraer todo el HTML de la página, analizarlo y seleccionar sólo los datos dentro de esa clase específica. Primero, hagamos algunos preparativos rápidos.

3. Preparar el espacio de trabajo

Puede utilizar cualquier IDE que le resulte cómodo. En este ejemplo, usaré Visual Studio Code. También necesitará instalar .NET SDK.

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

Panel de extensiones de Visual Studio Code: búsqueda de extensiones de C#

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

Después de crear el lugar de trabajo, puede crear una plantilla de aplicación simple "Hello World" introduciendo el siguiente comando en el terminal de nuestro proyecto:

dotnet nueva consola

Tu nuevo proyecto debería tener este aspecto:

Fragmento de código en C# que muestra «¡Hola, mundo!» en una aplicación de consola

A continuación, debe instalar estos dos paquetes:

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

Puede instalarlos utilizando estas líneas de comando dentro del terminal de sus proyectos:

dotnet add package csvhelper
dotnet add package htmlagilitypack

4. Escribir el código

Vamos a importar los paquetes que instalamos hace unos minutos, y algunos 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, crearemos una clase pública para los títulos de nuestra tabla de contenidos.

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

Ahora, volviendo a la función Principal, tienes que cargar la página que deseas raspar. Como he mencionado antes, vamos a ver lo que Wikipedia escribe 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 buscada, que se encuentra en las etiquetas span con la clase toctext.

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

¿Qué hacer ahora con esta información? Almacenémosla en un archivo .csv para su uso posterior. Para ello, primero tienes que iterar sobre cada nodo que extrajimos antes y almacenar su texto en una lista.

CsvHelper hará el resto del trabajo, creando y escribiendo la información extraída en un archivo.

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. Ejecución del código

El código está hecho y ahora sólo tenemos que ejecutarlo. Utiliza esta línea de comandos en el terminal. ¡Asegúrate de haber guardado tu archivo primero!

ejecutar dotnet

¡Ya está!

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

Resulta muy útil disponer de un raspador propio, pero hay que tener en cuenta que sólo se puede raspar una página web cada vez y que hay que seleccionar manualmente las etiquetas dentro del código HTML del sitio web.

Si quieres scrapear varias páginas más, será mucho más rápido usar un scraper que seleccionar la información manualmente, sí, pero no todos los sitios web pueden ser scrapeados usando 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 prefabricada y más avanzada para ayudarte a raspar en masa? 

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

Hasta la próxima.

Acerca del autor
Suciu Dan, cofundador de WebScrapingAPI
Suciu DanCofundador

Suciu Dan es cofundador de WebScrapingAPI y escribe guías prácticas dirigidas a desarrolladores sobre el scraping web con Python, el scraping web con Ruby y las infraestructuras de proxy.

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.