Extraer cuerpo de archivo HTML usando ANSI C - Trabajo con cadenas

C – Extraer contenido de archivo HTML

En este post de programación en C te enseñaré cómo obtener el texto (ignorando etiquetas) que se encuentra dentro de las etiquetas <body> de un archivo HTML.

Vamos a extraer lo que hay en el cuerpo de la página, pero además vamos a obtener solo el texto, ignorando todas las etiquetas que existan. Por poner un ejemplo, si la página es:

El programa en ANSI C debe extraer el contenido y además ignorar las etiquetas, produciendo la siguiente salida:

Veamos cómo resolver este ejercicio propuesto en C, ya que en otro lenguaje con soporte nativo de expresiones regulares sería fácil, pero aquí no lo es tanto.

Explicación del algoritmo

Vamos a dividir el problema en dos partes. Primero debemos extraer lo que hay en el cuerpo, entre las etiquetas <body> y </body>.

Para ello usamos strstr, buscamos el inicio y fin y después extraemos lo que haya entre estas etiquetas, copiándolo a una nueva cadena.

Después de eso recorremos la cadena (que será el cuerpo del documento) y si encontramos el inicio de una etiqueta (<) ignoramos los siguientes caracteres hasta que encontremos la etiqueta de cierre (>).

De este modo al final tendremos la cadena limpia en donde estará todo el HTML ya parseado. Obviamente esto ni siquiera se acerca a un parseador o intérprete, solo es un ejercicio que me pareció interesante de publicar.

Leyendo contenido y almacenando en cadena

Aunque esto no es lo más óptimo, es lo más fácil. Necesitamos almacenar todo el contenido del archivo en una cadena, así que recorremos el archivo y vamos concatenando a la cadena.

Cuando el código se haya ejecutado tendremos el contenido en una cadena de C.

Extrayendo body de HTML

Siguiendo con este ejercicio de C necesitamos extraer lo que se encuentra entre las etiquetas del cuerpo. Para ello simplemente usamos strstr y luego extraemos la cadena.

Hasta este momento ya tenemos el cuerpo, pero nos falta ignorar las etiquetas.

Ignorando etiquetas HTML y obteniendo solo texto usando C

Necesitamos declarar otra cadena, que será en donde estará el texto ya limpio sin etiquetas HTML. Más tarde podemos imprimir o guardar la cadena en un archivo de texto, mientras tanto el código que ignora las etiquetas es:

Nos servimos de una bandera que nos dice si debemos tomar en cuenta el carácter actual o descartarlo. En caso de que el no debamos ignorar, concatenamos ese char a la cadena del resultado.

Al terminar, vamos a tener lo que necesitamos dentro de contenidoLimpio.

Poniendo todo junto

El código completo queda encerrado en una función que recibe el nombre del archivo que hay que parsear:

Para usarla podemos usar el siguiente código que ya lleva todo lo necesario:

Yo lo he ejecutado y funciona de maravilla:

Extraer cuerpo de archivo HTML usando ANSI C - Trabajo con cadenas
Extraer cuerpo de archivo HTML usando ANSI C – Trabajo con cadenas

Si tú quieres puedes descargar el código y probarlo por ti mismo, o ejecutarlo en línea aquí.

Para terminar te invito a leer más sobre programación en C en mi blog.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario