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

Apiasp.Net Core Web Scraping: tu guía definitiva para 2023

Apiasp.Net Core Web Scraping: tu guía definitiva para 2023

Extracción web básica en Apiasp.net

El web scraping es una técnica preprogramada para extraer grandes volúmenes de datos de sitios web. La mayor parte de estos datos se encuentra desorganizada y en formato HTML. No obstante, posteriormente se transforma en información estructurada en una base de datos o hoja de cálculo para su uso en otros programas. 

Para extraer datos de sitios web, el web scraping puede realizarse mediante diversos métodos únicos. Estos incluyen el uso de servicios en línea, API específicas o incluso escribir tu propio código desde cero para el web scraping. Puedes acceder a los datos de forma estructurada en varios sitios web.

Aunque esta suele ser la mejor opción, algunos sitios web carecen de la capacidad de proporcionar a los usuarios grandes volúmenes de datos de forma ordenada o no son muy avanzados en términos de innovación. En ese caso, es mejor emplear el web scraping para recopilar datos del sitio web.

Python es actualmente el lenguaje de programación más utilizado para el web scraping. Para el web scraping, Python pone a su disposición varias bibliotecas. .NET también se puede utilizar para el rastreo web simultáneamente. Podemos extraer datos de muchos sitios web utilizando alguna API web de terceros.

Una API popular para el web scraping en .NET se llama WebScrapingAPI. Recientemente, también han incluido la edición .NET Core para el web scraping.

Diferencia entre el web scraping y el web crawl ing

Diferencia entre el web scraping y el web crawling 

Los navegadores web se utilizan para mostrar metadatos en las páginas web que se encuentran en Internet, que alberga una cantidad considerable de datos. Los usuarios pueden simplemente desplazarse entre sitios web e interpretar los datos utilizando páginas de visualización basadas en el navegador. 

El rastreo web y el scraping web son términos que se utilizan para describir el proceso de extracción de código de visualización. El scraping web es el proceso de analizar una página web y obtener información de ella. La búsqueda de enlaces web y la obtención de su contenido de forma iterativa se denomina rastreo web. 

Ambas operaciones las lleva a cabo una aplicación, ya que el descubrimiento de nuevas conexiones requiere el scraping de páginas web. Ambos términos, que en ocasiones se utilizan como sinónimos, se refieren al procedimiento de obtención de información. Sin embargo, tienen muchos fines. 

¿Cómo y dónde se puede aplicar este conocimiento?

En Internet se pueden encontrar más respuestas que el número de sitios web existentes. Esta información puede ser una herramienta valiosa para crear aplicaciones, y comprender cómo escribir dicho código podría aplicarse a las pruebas web automatizadas.

En este blog, analizaremos dos métodos para rastrear y extraer datos de la web utilizando navegadores y solicitudes HTTP básicas, además de las ventajas y desventajas de cada uno.

Utilización de consultas HTTP y navegadores web para descargar contenido web

Utilización de consultas HTTP y navegadores web para descargar contenido web

Dado que hoy en día casi todo está en línea, sin duda se puede encontrar un módulo para enviar solicitudes HTTP en cualquier lenguaje de programación. Las solicitudes HTTP simples se realizan rápidamente. Se tarda más en utilizar navegadores web como Firefox y Google Chrome como alternativa. 

Se comportan y se presentan de forma diferente, modificando cómo se muestra cada actividad para que sea fácilmente legible y se utilice teniendo en cuenta los estilos de visualización y la ejecución de scripts de las páginas web. Los navegadores web a veces desperdician recursos. Por ejemplo, una simple solicitud HTTP puede ser suficiente si se intenta recuperar texto de una página web y descargarlo como texto sin formato.

No obstante, dado que JavaScript se utiliza tan ampliamente, parte del contenido de muchos sitios web no se puede mostrar si no se ejecuta. En este caso, la descarga de contenido web resulta más fácil utilizando un navegador.

Análisis de CSS y XPath

Análisis de CSS y XPath

XPath y CSS son dos métodos de análisis de texto que se utilizan con frecuencia. XPath, un lenguaje de marcado de consultas, se utiliza para identificar elementos específicos en archivos XML y HTML. 

Cada uno contiene una estructura específica, y ese patrón puede seguirse al escribir una consulta. Los selectores CSS son un medio para elegir elementos que utilizan un patrón de cadena y son ligeramente comparables a XPath, ya que los estilos CSS se aplican sobre la estructura HTML.

Preparación de la demostración

Preparación de la demostración

Estas demostraciones utilizan los entornos C# y .NET Core 3.1. Estas API deben funcionar en .NET 4x, ya que no han sufrido grandes cambios recientemente. En el repositorio también se incluye un sitio de ejemplo (una aplicación ASP.NET Core MVC) con tres páginas:

  • Páginas con una tabla sencilla 
  • Páginas con un «enlace oculto» y 
  • Un botón que solo se muestra tras un tiempo de espera

Creación de una API web de ASP.NET Core con Visual Studio 2022

Creación de una API web de ASP.NET Core con Visual Studio 2022

Con .NET 6.0, se puede utilizar Visual Studio 2022 para desarrollar una API de aplicación web ASP.NET Core. En Visual Studio, debe asignar un nombre válido al proyecto y seleccionar la plantilla de API de aplicación web ASP.NET Core.

Tienes el marco .NET Core Web API 6.0 como opción. Además, puedes seleccionar la compatibilidad predeterminada con Open API. Para el proyecto, esto dará lugar a metadatos Sass. 

Las API que se enumeran aquí deben instalarse mediante el gestor de paquetes NuGet.

Para páginas estáticas

Para páginas estáticas

Configuración

Configuración

Si utilizas C#, es muy probable que ya trabajes con Visual Studio. En esta publicación, se utiliza un proyecto específico de aplicación web .NET Core basado en MVC (Model View Controller). 

Utiliza el gestor de paquetes NuGet para incorporar las bibliotecas necesarias que se utilizan a lo largo de toda esta guía después de crear un proyecto nuevo.

Para descargar los paquetes en NuGet, selecciona la opción «Examinar» y, a continuación, escribe «HTML Agility Pack».

Ahora ya estás listo para continuar tras instalar el paquete. La tabla HTML obtenida se puede analizar fácilmente con este paquete para localizar las etiquetas y los datos que deseas guardar. 

Las siguientes API deben incluirse en el código antes de comenzar a programar el rastreador a través de Visual Studio:

Uso de C# para enviar una solicitud HTTP a una página web

Uso de C# para enviar una solicitud HTTP a una página web

Imagina un proyecto de ejemplo en el que tengas que buscar en Wikipedia información sobre programadores informáticos famosos. Si no hubiera un artículo sobre esto, Wikipedia no sería Wikipedia, ¿verdad?

 https://en.wikipedia.org/wiki/list-of-programmers 

En ese artículo se puede encontrar una lista de desarrolladores con hipervínculos a la página de Wikipedia de cada persona. Para su uso posterior, puede extraer la lista y guardar los datos en formato CSV (que, por ejemplo, Excel puede procesar fácilmente).

La idea principal detrás del web scraping es localizar un sitio web que contenga los datos necesarios, utilizar C# para extraer la información y guardarla para su uso posterior. Este es solo un ejemplo sencillo de lo que se puede lograr con el web scraping.

Los hipervínculos de una página de categoría superior se pueden utilizar para rastrear páginas web en proyectos más complejos. Sin embargo, centrémonos en esa página específica de Wikipedia para los siguientes ejemplos.

Obtener HTML con .HttpClient API web de .NET Core

Obtener HTML con .HttpClient API web de .NET Core

Un cliente HTTP integrado para .NET se llama HttpClient y está disponible de forma predeterminada. No se requieren bibliotecas ni complementos independientes de terceros, ya que el dominio Net.HTTP lo hace todo. Además, incluye soporte nativo para llamadas diferidas.

El siguiente ejemplo muestra lo fácil que es obtener el contenido de cualquier URL de forma asíncrona y sin bloqueos utilizando GetStringAsync()

private static async Task<string> CallUrl(string full URL)

{

HttpClient client = new HttpClient();

var response = await client.GetStringAsync(full URL);

return response;

}

Basta con crear un objeto HttpClient nuevo, llamar a GetStringAsync(), «esperar» a que termine y, a continuación, devolver el resultado al llamante. Ahora que se ha añadido esa tecnología a la clase del controlador, puedes llamar a CallUrl() desde el método Index() sin necesidad de realizar ninguna acción adicional. Vamos a hacerlo.

public IActionResult Index(){

string url = "https://en.wikipedia.org/wiki/List_of_programmers";

var response = CallUrl(url).Result;

return View();}

Aquí especificamos la URL de Wikipedia en la variable url, la llamamos con CallUrl() y guardamos el resultado en las variables dependientes.

Bien, el código necesario para enviar la solicitud HTTP ya está listo. Aunque todavía no lo hemos procesado, es una excelente idea ejecutar el código inmediatamente para asegurarnos de que se recibe el HTML de Wikipedia y no hay errores.

Para ello, primero colocaremos una pausa en return View() en el método Index(). Esto garantizará que puedas ver los resultados utilizando la interfaz de usuario del depurador de Visual Studio.

Al seleccionar la opción «Ejecutar» de la barra de herramientas de Visual Studio, puedes probar el código mencionado anteriormente: En el punto de interrupción, Visual Studio se detendrá, lo que te permitirá ver el estado actual de la aplicación.

Al pasar el cursor por encima de la variable, se observa que el servidor ha devuelto una página HTML válida, lo que indica que ya estamos listos para continuar. Si seleccionas «HTML Visualizer» en el menú contextual, verás una vista previa de la página HTML.

Análisis de HTML

Análisis de HTML

Ahora es el momento de analizar la tabla HTML que se ha recuperado. Por ejemplo, una popular suite de análisis llamada HTML Agility Pack se puede integrar fácilmente con LINQ.

Debes comprender la estructura de la página antes de analizar la tabla HTML para poder identificar con precisión qué elementos recuperar. Las herramientas de desarrollo de tu navegador volverán a ser útiles en esta situación, ya que te permiten examinar a fondo el árbol DOM.

Veremos en nuestra página de Wikipedia que los enlaces de nuestra tabla de contenidos son abundantes, por lo que no los necesitaremos. También hay otros enlaces adicionales, algunos de los cuales no son absolutamente necesarios para nuestra recopilación de datos (como los enlaces de edición). 

Si lo analizamos más a fondo, vemos que cada enlace que nos interesa está contenido dentro de un elemento padre . Ahora sabemos que los elementos se utilizan tanto para la tabla de contenido de la página como para nuestros componentes de enlace reales, según el árbol DOM.

Dado que en realidad no queremos la tabla de contenido, debes asegurarte de que esos elementos `li>` se filtren. Por suerte, tienen clases HTML distintas, por lo que podemos omitir fácilmente cualquier elemento `li>` con clases de sección en el código.

¡Manos a la obra! Empezaremos incluyendo el método ParseHtml en nuestra clase de controlador ().

Aquí, primero creamos una instancia de HtmlDocument y luego cargamos la página HTML que descargamos anteriormente mediante CallUrl (). Ahora que tenemos una representación DOM válida de nuestra página, podemos empezar a extraerla.

  • Recogemos todos los descendientes li> mediante Descendants ()
  • Para filtrar los elementos que utilizan las clases HTML mencionadas, utilizamos LINQ (Where()).
  • En nuestras listas de cadenas wikiLink, recorremos (for each) nuestros enlaces y conservamos sus URL (relativas) como URL relativas.

Devolvemos la lista de cadenas a nuestro llamante.

XPath

XPath

No habría sido necesario seleccionar los elementos individualmente, y es importante tenerlo en cuenta. Solo lo hicimos para dar un buen ejemplo.

Aplicar una consulta XPath será considerablemente más práctico en programas del mundo real. Eso permitiría que todo nuestro proceso de selección cupiera en una sola frase.

De forma similar a nuestro procedimiento convencional, esto seleccionará cualquier (//) li> que no tenga la clase especificada (not(contains())).

Creación de un archivo para exportar los datos extraídos

Creación de un archivo para exportar los datos extraídos

El texto de la tabla HTML se descargó de Wikipedia, se analizó y procesó en un árbol DOM, y se extrajeron con éxito todos los enlaces necesarios. Como resultado, ahora disponemos de una lista general de hipervínculos de la página.

Ahora hay que exportar los enlaces a un archivo en formato CSV. Para escribir la información de la lista general en un archivo, crearemos un nuevo método llamado WriteToCsv(). El procedimiento completo se muestra en el código que sigue. 

Este crea un archivo en el disco duro local llamado «links.csv» y guarda en él los hipervínculos extraídos. Por lo tanto, escriba los datos en un archivo del disco local utilizando las API nativas del marco .NET

Conclusión

Conclusión

Con herramientas como WebScrapingAPI, es muy sencillo crear un proyecto de rastreador y recopilar la información necesaria rápidamente. C# y .NET, en general, contienen todos los recursos y bibliotecas necesarios para que puedas implementar tu propio rastreador de datos.

Los diversos métodos para evitar ser bloqueado o que el servidor reduzca su tasa de acceso es un tema que solo hemos abordado brevemente. Por lo general, más que las restricciones técnicas, es esto lo que se interpone en el camino del web scraping.

Si prefieres concentrarte en tus datos en lugar de lidiar con agentes de usuario, restricciones de velocidad, proxies y dificultades con JavaScript, echa un vistazo a las funciones de vanguardia de WebScrapingAPI. 

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.