Parseo de HTML en Java: revisión de bibliotecas y herramientas
El parseo de HTML es el proceso de extracción de datos estructurados a partir de documentos HTML. En Java, existen varias bibliotecas potentes para esta tarea, que permiten no solo analizar páginas estáticas, sino también procesar contenido dinámico. En este artículo, revisaremos tres de las herramientas más populares: Jsoup, HtmlUnit y Jericho HTML Parser. Cada una tiene sus propias características y áreas de aplicación.
1. Jsoup — parser HTML universal
Jsoup es la biblioteca Java más popular para trabajar con HTML. Proporciona una API conveniente para cargar, analizar y extraer datos, además de soportar selectores CSS y manipulaciones del árbol DOM. Jsoup es ideal para páginas estáticas y tareas simples de web scraping.
Funcionalidades principales:
- Carga de HTML desde URL, archivo o cadena de texto
- Extracción de datos mediante selectores CSS
- Limpieza de HTML eliminando etiquetas no deseadas
- Modificación del DOM (añadir/eliminar elementos)
- Corrección automática de HTML no válido
Ejemplo de código: extracción de titulares de noticias
import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import org.jsoup.select.Elements;
public class JsoupExample { public static void main(String[] args) throws Exception { // Cargamos la página HTML Document doc = Jsoup.connect("https://example.com/news") .userAgent("Mozilla/5.0") .timeout(5000) .get(); // Extraemos todos los encabezados h2 con la clase "news-title" Elements titles = doc.select("h2.news-title"); // Mostramos el texto de cada encabezado titles.forEach(title -> System.out.println(title.text())); }}2. HtmlUnit — parseo con soporte de JavaScript
HtmlUnit es un navegador headless en Java que emula el funcionamiento de un navegador web. A diferencia de Jsoup, ejecuta código JavaScript, maneja peticiones AJAX y soporta cookies. Es una herramienta indispensable para el parseo de aplicaciones SPA modernas y sitios con contenido dinámico.
Características clave:
- Emulación completa del navegador (Chrome, Firefox, IE)
- Ejecución de JavaScript (incluyendo jQuery y React)
- Soporte para formularios, clics y navegación entre páginas
- Manejo de cookies, sesiones y redirecciones
- Soporte integrado para XPath y selectores CSS
Ejemplo de código: esperar la carga de contenido dinámico
import com.gargoylesoftware.htmlunit.WebClient;import com.gargoylesoftware.htmlunit.html.HtmlPage;import com.gargoylesoftware.htmlunit.html.HtmlElement;
public class HtmlUnitExample { public static void main(String[] args) throws Exception { try (WebClient webClient = new WebClient()) { // Desactivamos el registro y los tiempos de espera webClient.getOptions().setThrowExceptionOnScriptError(false); webClient.getOptions().setJavaScriptEnabled(true); // Cargamos la página HtmlPage page = webClient.getPage("https://example.com/dynamic"); // Esperamos 2 segundos para la ejecución de JS webClient.waitForBackgroundJavaScript(2000); // Extraemos datos mediante XPath HtmlElement element = page.getFirstByXPath("//div[@class='result']/p"); System.out.println("Resultado: " + element.getTextContent()); } }}3. Jericho HTML Parser — ligero y rápido
Jericho HTML Parser es una biblioteca ligera con dependencias mínimas. Maneja excelentemente el parseo de HTML no válido y proporciona acceso de bajo nivel a la estructura del documento.
También en la biblioteca
Trabajo con Excel en Rust: bibliotecas para lectura y escritura
Envío de email en Rust: bibliotecas lettre y async-smtp para boletines por correo
Generación Swagger/OpenAPI para Java: bibliotecas y herramientas
Guía completa de SwiftyJSON para Swift con ejemplos
Validación de datos en Node.js con Joi: guía completa