JavaRush /Blog Java /Random-ES /Fácil análisis de HTML con jsoup
Stanislav
Nivel 21
Москва

Fácil análisis de HTML con jsoup

Publicado en el grupo Random-ES
Quizás algún día necesite obtener información de un sitio web o un documento HTML en su aplicación, y diré sin más preámbulos que usar la biblioteca jsoup simplificará enormemente su tarea. Según la wiki , jsoup es una biblioteca Java de código abierto diseñada para analizar, extraer y manipular datos almacenados en documentos HTML.

Comienzo rápido

La biblioteca se puede descargar como un archivo jar y colocar en un proyecto, o conectarse usando Maven/Gradle. Dejaré un enlace al sitio web oficial al final del artículo: allí podrás encontrar la versión actual de la biblioteca. En el ejemplo usaremos la conexión a través de Maven. Agreguemos una dependencia:
<​dependency​>
  <​groupId>org.jsoup</groupId>
  <​artifactId>jsoup</artifactId>
  <​version>1.11.3</version>
</dependency>

Uso

En primer lugar, debe obtener una instancia de la clase Documentde org.jsoup.nodes.Document que indique la fuente para el análisis. Puede ser un archivo local o un enlace. Por ejemplo, en este artículo usaremos el sitio web yandex.ru e intentaremos obtener sus noticias actuales:
Document doc = Jsoup.connect("https://yandex.ru/")
                .userAgent("Chrome/4.0.249.0 Safari/532.5")
                .referrer("http://www.google.com")
                .get();
User Agentes un identificador que se comunica al sitio que se visita. En muchos sitios es el criterio más importante para el filtro antispam. Referrercontiene la URL de la fuente de la solicitud. El método get()genera una IOException manejada, por lo que podemos envolver todo en try/catchun bloque o simplemente lanzarlo más lejos con throws. Ahora hemos recibido el código fuente de esta página. Si es necesario, la propia biblioteca jsoup puede restaurar los elementos dañados. Ahora todo lo que tenemos que hacer es limitar la búsqueda a un bloque separado. El método select()tiene una gran selección de usos: le permite buscar elementos por etiqueta, atributos, clase y otros parámetros. Casi todos los navegadores modernos admiten la posibilidad de buscar rápidamente el código fuente de un elemento seleccionado. Con manipulaciones simples, encontramos el código fuente del elemento que necesitamos y obtenemos divun bloque con la clase especificada, que usaremos para el muestreo. Fácil análisis de HTML usando jsoup - 1Usemos la clase Elementsde org.jsoup.select.Elements para seleccionar todos los elementos de nuestro bloque seleccionado.
Elements listNews = doc.select("div#tabnews_newsc.content-tabs__items.content-tabs__items_active_true");
Ahora tenemos algo como esto: Fácil análisis de HTML usando jsoup - 2Ahora todo lo que tenemos que hacer es usar un pequeño bucle para recorrer todos los elementos:
for (Element element : listNews.select("a"))
            System.out.println(element.text());
El método text()le permite descartar el código de marcado y deja solo una combinación de texto para todos los elementos entrantes. El resultado de la ejecución será el siguiente: Fácil análisis de HTML usando jsoup - 3Es fácil notar que el número real de filas recibidas no corresponde a la visualización real en la página. Aquí es donde residen los peligros. Si observa el código fuente del marcado, notará que las últimas noticias cambian animadamente en un intervalo de tiempo determinado. Algunas de estas “piedras” se resuelven mediante muestreos adicionales y, por supuesto, pruebas. Puede resultar que los primeros cinco elementos contengan la información que necesitamos y que el sexto elemento solo contenga una línea vacía escrita. También sucede que los bloques no tendrán ningún identificador, entonces es posible apuntar directamente mediante un método get(int index)al número de posición del elemento en cuestión.
System.out.println(listNews.select("a").get(2).text());

Conclusión

Este ejemplo muestra sólo una pequeña parte de lo que jsoup es capaz de hacer. También está el hecho de que los sitios se actualizan con frecuencia, cambiando la estructura del código de marcado, por lo que cuando trabaje con scraping, debe estar preparado para adaptarse a los cambios. Puede obtener más información y la versión actual en el sitio web oficial jsoup.org ; puede leer más sobre clases y métodos en o7planning.org . Dejaré un enlace a mi github , al momento de escribir hay varios bots de Telegram que usan Jsoup para recibir y mostrar información.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION