JavaRush /Blog Java /Random-ES /3 ejemplos de cómo analizar un archivo HTML en Java usand...
Sdu
Nivel 17

3 ejemplos de cómo analizar un archivo HTML en Java usando Jsoup

Publicado en el grupo Random-ES
3 ejemplos de cómo analizar un archivo HTML en Java usando Jsoup - 1HTML es el núcleo de la WEB, todas las páginas de Internet que ve, ya sea que se generen dinámicamente usando JavaScript, JSP, PHP, ASP u otras tecnologías web, se basan en HTML. De hecho, su navegador analiza el HTML y lo muestra de la forma que le resulte más cómoda. Pero, ¿qué sucede si necesita analizar un documento HTML y encontrar algún elemento, etiqueta, atributo en él o verificar si un elemento específico existe o no utilizando un programa Java? Si hubiera sido programador de Java durante varios años, estoy seguro de que habría realizado el análisis XML utilizando analizadores como DOM o SAX. Pero, irónicamente, hay ocasiones en las que es necesario analizar un documento HTML desde una aplicación Java básica que no contiene Servlets ni otras tecnologías web Java. Además, Core JDK tampoco contiene bibliotecas HTTP o HTML. Por eso, cuando se trata de analizar un archivo HTML, muchos programadores de Java le preguntan a Google cómo obtener el valor de una etiqueta HTML en Java. Cuando me encontré con esto, estaba seguro de que la solución sería una biblioteca de código abierto que implementara la funcionalidad que necesitaba, pero no sabía que sería tan maravillosa y rica en funciones como Jsoup. No solo brinda soporte para leer y analizar archivos HTML, atributos y clases CSS en el estilo JQuery, sino que al mismo tiempo le permite modificarlos. Usando Jsoup puedes hacer lo que quieras con un documento HTML. En este artículo, analizaremos un archivo HTML y encontraremos los nombres y atributos de las etiquetas. También veremos ejemplos de descarga y análisis de HTML desde un archivo y cualquier URL, como la página de inicio de Google.

¿Qué es Jsoup?

Jsoup es una biblioteca Java de código abierto para trabajar con HTML real. Proporciona una API muy conveniente para recuperar y manipular datos utilizando las mejores técnicas similares a DOM, CSS y jQuery. Jsoup implementa la especificación WHATWG HTML5 y analiza HTML en el mismo DOM que lo hacen los navegadores modernos como Chrome y Firefox. Estas son algunas de las características útiles de la biblioteca Jsoup:
  • Jsoup puede extraer y analizar HTML de una URL, archivo o cadena.
  • Jsoup puede buscar y extraer datos mediante recorrido DOM o selectores CSS.
  • Jsoup le permite manipular elementos, atributos y texto HTML.
  • Jsoup proporciona una limpieza de lista blanca de la información proporcionada por el usuario para evitar ataques XSS.
  • Jsoup también produce HTML "ordenado".
Jsoup está diseñado para funcionar con los distintos tipos de HTML que existen en el mundo real, incluido HTML validado correctamente con un conjunto de etiquetas incompleto y no validado. Una de las principales ventajas de Jsoup es su fiabilidad.

Analizando HTML en Java usando Jsoup

En este tutorial, veremos tres ejemplos diferentes de cómo analizar y recorrer un documento HTML en Java usando Jsoup. En el primer ejemplo, analizaremos una cadena HTML que contiene etiquetas en forma de cadena literal Java. En el segundo ejemplo, descargaremos nuestro documento HTML de Internet y, en el tercer ejemplo, descargaremos nuestro propio archivo HTML de muestra login.html para analizarlo. Este archivo es un documento HTML de muestra que consta de una etiqueta "título" y una etiqueta "div" en la sección "cuerpo" que contiene el formulario HTML. El formulario contiene campos para ingresar un nombre de usuario y contraseña, así como botones de reinicio y confirmación para acciones adicionales. Este es HTML "correcto" que puede pasar la verificación de "validez", lo que significa que todas las etiquetas y atributos están cerrados correctamente. Así es como se ve nuestro archivo HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Login Page</title>
    </head>
    <body>
        <div id="login" class="simple" >
            <form action="login.do">
                Username : <input id="username" type="text" /><br>
                Password : <input id="password" type="password" /><br>
                <input id="submit" type="submit" />
                <input id="reset" type="reset" />
            </form>
        </div>
    </body>
</html>
Con Jsoup es muy fácil analizar HTML, todo lo que necesita hacer es llamar a un método estático Jsoup.parse()y pasarle su cadena HTML. Jsoup proporciona varios métodos sobrecargados parse()para leer HTML desde una cadena, un archivo, un URI base, una URL y un archivo InputStream. También puede especificar la codificación para leer correctamente el archivo HTML si no está en formato UTF-8. El método parse(String html)analiza el HTML entrante en un nuevo objeto Document. En Jsoup, una clase Documenthereda de una clase Element, que extiende la clase Node. La clase también Nodehereda de la clase TextNode. Siempre que pase una cadena no nula al método, se garantiza que tendrá un análisis exitoso y significativo de un objeto Documentque contenga (al menos) los elementos "head" y "body". Si tiene un objeto Document, puede obtener los datos deseados llamando a los métodos apropiados de la clase Documenty sus padres Elementy Node.

Programa Java para analizar documentos HTML.

Aquí está nuestro programa completo para analizar una cadena HTML, un archivo HTML descargado de Internet y un archivo HTML local. Para ejecutarlo, puedes usar un IDE (Eclipse o cualquier otro) o la línea de comando. En Eclipse esto es muy fácil, simplemente copie este código, cree un nuevo proyecto Java, haga clic derecho en la carpeta "src" y pegue el código copiado. Eclipse se encargará de crear el paquete adecuado y el archivo de código fuente con el nombre apropiado, por lo que es mucho menos trabajo. Si ya tienes un proyecto Java, este es sólo un paso. El siguiente programa ilustra tres ejemplos de análisis y recorrido de un archivo HTML. En el primer ejemplo, analizamos directamente una cadena que contiene HTML, en el segundo un archivo HTML descargado desde una URL, en el tercero descargamos y analizamos un documento HTML del sistema de archivos local.
import java.io.File;
import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

/**
* Java Program to parse/read HTML documents from File using Jsoup library.
* Jsoup is an open source library which allows Java developer to parse HTML
* files and extract elements, manipulate data, change style using DOM, CSS and
* JQuery like method.
*
* @author Javin Paul
*/
public class HTMLParser{

    public static void main(String args[]) {

        // Parse HTML String using JSoup library
        String HTMLSTring = "<!DOCTYPE html>"
                + "<html>"
                + "<head>"
                + "<title>JSoup Example</title>"
                + "</head>"
                + "<body>"
                + "<table><tr><td><h1>HelloWorld</h1></tr>"
                + "</table>"
                + "</body>"
                + "</html>";

        Document html = Jsoup.parse(HTMLSTring);
        String title = html.title();
        String h1 = html.body().getElementsByTag("h1").text();

        System.out.println("Input HTML String to JSoup :" + HTMLSTring);
        System.out.println("After parsing, Title : " + title);
        System.out.println("Afte parsing, Heading : " + h1);

        // JSoup Example 2 - Reading HTML page from URL
        Document doc;
        try {
            doc = Jsoup.connect("http://google.com/").get();
            title = doc.title();
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Jsoup Can read HTML page from URL, title : " + title);

        // JSoup Example 3 - Parsing an HTML file in Java
        //Document htmlFile = Jsoup.parse("login.html", "ISO-8859-1"); // wrong
        Document htmlFile = null;
        try {
            htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // right
        title = htmlFile.title();
        Element div = htmlFile.getElementById("login");
        String cssClass = div.className(); // getting class form HTML element

        System.out.println("Jsoup can also parse HTML file directly");
        System.out.println("title : " + title);
        System.out.println("class of div tag : " + cssClass);
    }
}
Producción:
Input HTML String to JSoup :<!DOCTYPE html><html><head><title>JSoup Example</title></head><body><table><tr><td><h1>HelloWorld</h1></tr></table></body></html>
After parsing, Title : JSoup Example
Afte parsing, Heading : HelloWorld
Jsoup Can read HTML page from URL, title : Google
Jsoup can also parse HTML file directly
title : Login Page
class of div tag : simple
El analizador HTML de Jsoup hará todo lo posible para producir un análisis "limpio" del HTML que usted proporcione, ya sea que esté bien formado o no. Puede manejar los siguientes errores:
  • etiquetas no cerradas. Por ejemplo,<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
  • etiquetas implícitas. Por ejemplo, los abiertos <td>Java is Great</td>se envolverán en<table><tr><td>
  • Jsoup crea estructuras de documentos sólidas (HTML contiene encabezado y cuerpo, pero el cuerpo contiene solo elementos relevantes)
Jsoup es una biblioteca de código abierto excelente y confiable que simplifica la lectura de documentos html, fragmentos de cuerpo, cadenas html y el análisis directo de contenido web html.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION