Análisis de HTML en Kotlin: jsoup, ktor, khtml y otras herramientas

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Análisis de HTML en Kotlin: Guía completa de herramientas y bibliotecas



El análisis de HTML (extracción de datos de páginas web) es una de las tareas clave al crear parsers, analizadores de contenido o integrar datos externos. En el ecosistema de Kotlin existen varias bibliotecas potentes que permiten trabajar eficientemente con HTML. En este artículo, analizaremos en detalle las mejores herramientas, sus características y proporcionaremos ejemplos prácticos de código.



1. jsoup — el estándar de facto para el análisis de HTML



jsoup es la biblioteca Java más popular para trabajar con HTML, que funciona perfectamente también en Kotlin. Proporciona una API conveniente para cargar, analizar y extraer datos de documentos HTML.



Funcionalidades principales:

  • Carga de HTML desde URL, archivo o cadena
  • Soporte de selectores CSS para buscar elementos
  • Limpieza de HTML de etiquetas no deseadas
  • Modificación del árbol DOM


Ejemplo de uso de jsoup en Kotlin:



import org.jsoup.Jsoupimport org.jsoup.nodes.Document

fun main() { // Cargamos el documento HTML val doc: Document = Jsoup.connect("https://example.com").get() // Extraemos el título de la página val title: String = doc.title() println("Título: $title") // Buscamos todos los enlaces en la página val links = doc.select("a[href]") links.forEach { link -> val href = link.attr("href") val text = link.text() println("Enlace: $text -> $href") } // Extraemos el texto de un bloque específico val content = doc.select("div.content").text() println("Contenido: $content") // Trabajo con formularios val form = doc.select("form").first() form?.select("input")?.forEach { input -> println("Campo: ${input.attr("name")} = ${input.attr("value")}") }}


2. Ktor Client + khtml — stack moderno de Kotlin



Ktor Client es un cliente HTTP asíncrono para Kotlin que se combina perfectamente con la biblioteca khtml (analizador HTML de Kotlin). Juntos forman una herramienta potente para web scraping.



Ventajas del enfoque:

  • Soporte nativo de corrutinas (funciones suspend)
  • Carga asíncrona de páginas
  • Configuración flexible de solicitudes HTTP
  • Soporte de cookies, sesiones y proxies


Ejemplo con Ktor Client y khtml:



import io.ktor.client.*import io.ktor.client.request.*import io.ktor.client.statement.*import kotlinx.coroutines.runBlockingimport org.jsoup.Jsoup

suspend fun fetchAndParse(url: String) { val client = HttpClient() try { // Carga asíncrona de HTML val response: HttpResponse = client.get(url) val html: String = response.bodyAsText() // Análisis con jsoup val doc = Jsoup.parse(html) val headlines = doc.select("h2, h3").map { it.text() } println("Títulos en la página:") headlines.forEach { println("- $it") } } catch (e: Exception) { println("Error al cargar: ${e.message}") } finally { client.close() }}

fun main() = runBlocking { fetchAndParse("https://kotlinlang.org")}


3. Selenium WebDriver — para páginas dinámicas



Si el sitio utiliza JavaScript activamente para renderizar contenido, necesitará Selenium WebDriver. Este ejecuta un navegador real y permite interactuar con elementos dinámicos.



Ejemplo con Selenium en Kotlin:



import org.openqa.selenium.Byimport org.openqa.selenium.WebDriverimport org.openqa.selenium.chrome.ChromeDriverimport org.openqa.selenium.chrome.ChromeOptions

fun scrapeDynamicPage() { val options = ChromeOptions().apply { addArguments("--headless") // Modo sin GUI addArguments("

Recommendations