JavaRush /Blog Java /Random-ES /Analizando html con la biblioteca jsoup
Сергей
Nivel 40
Москва

Analizando html con la biblioteca jsoup

Publicado en el grupo Random-ES
Por eso queremos obtener información específica del sitio. Veamos cómo hacer esto paso a paso. Analizando html con la biblioteca jsoup - 1Primero necesitamos obtener el Document. Esta es una representación de nuestra página html. Jsoup tiene varias formas de convertir un sitio en un archivo Document. Conectar al servidor

Document document = Jsoup.connect("https://hh.ru/").get();
El propio Jsoup se conecta al sitio. Este método es el más sencillo, pero sólo sirve para realizar pruebas. Hay clientes http más convenientes y flexibles. También tenga en cuenta que, sin importar qué cliente http utilice, agregue un encabezado a la solicitud User-Agentcon un valor como Chrome/81.0.4044.138. Usando este encabezado, el servidor determina desde qué dispositivo se conectó. Sin este encabezado, el servidor te considera un bot y puede prohibirte. Desde el archivo ;

File file = new File("hh-test.html");
Document document = Jsoup.parse(file, "UTF-8", "hh.ru");
Esta es la forma principal de conseguir un objeto Document. El último argumento "hh.ru"es el URI base. Esto es necesario para crear enlaces absolutos a partir de enlaces relativos que están presentes en el sitio. De la línea

String html =
                "<html>                                                                       " +
                "    <head>                                                                   " +
                "        <title href=\"hh.ru/vacancy?home\">                                  " +
                "            Работа в Москве, поиск персонала и публикация вакансий - hh.ru   " +
                "        </title>                                                             " +
                "    </head>                                                                  " +
                "    <body>                                                                   " +
                "        <div class=\"header main\">                                          " +
                "            <h1>Работа найдется для каждого</h1>                             " +
                "            <div>Поиск вакансий</div>                                        " +
                "        </div>                                                               " +
                "        <div class=\"content\">                                              " +
                "            <div>Вакансии дня</div>                                          " +
                "            <div id=\"123\">Компании дня</div>                               " +
                "            <div>Работа из дома</div>                                        " +
                "        </div>                                                               " +
                "    </body>                                                                  " +
                "</html>                                                                      ";

        Document document = Jsoup.parse(html, "hh.ru");
A continuación, demostraré la biblioteca en este html, que representa un sitio simplificado. Obtener una etiqueta La tarea principal al analizar es obtener la etiqueta deseada. Esto lo haremos usando el método select. Tenga en cuenta que siempre devuelve una lista de etiquetas. Si no se encuentran etiquetas, la lista estará vacía. Debe pasar un selector CSS mediante el cual se buscan etiquetas como argumento del método. Me detendré más en los selectores, porque todo el trabajo se reduce a escribir el selector correcto. Normalmente necesitamos componerlo para que devuelva una sola etiqueta.

Elements h1 = document.select("h1");
System.out.println(h1);
Obtener etiquetas etiquetas h1 Salida:

<h1>Работа найдется для каждого</h1>

Elements titleElem = document.select("head > title");
Obtener etiquetas title. El letrero >selecciona etiquetas titleanidadas dentro de una etiqueta.head

Elements divs = document.select("body > div");
Obtener etiquetas divanidadas enbody

Elements firstDiv = document.select("body > div:nth-child(1)");
Obtenga la primera etiqueta divanidada en body. Recuperar una etiqueta por número de serie es una mala manera, porque su posición en el sitio puede cambiar. Es mejor definir la etiqueta usando parámetros absolutos. Estos parámetros son atributos classyid

Elements contentElem = document.select("body > div.content");
Obtenga una etiqueta divcon la clase "contenido", anidada enbody

Elements idElem = document.select("#123");
Obtener etiquetas con ID "123"

Elements divHeader = document.select("body > div.header.main :not(h1)");
Obtenga etiquetas divcon la clase "encabezado" y "principal", anidadas en body, pero sin etiquetas h1 .

<div>
 Поиск вакансий
</div>
Elementos Métodos Una vez que hemos recibido una lista, Elementspodemos extraer datos de ella. Permítanme recordarles que normalmente el selector busca una etiqueta, es decir. debe Elementsser talla 1.

  elements.size();
número de etiquetas encontradas

elements.get(0);
obtener la primera etiqueta de la lista de encontradas

elements.text();
texto incrustado en la etiqueta

elements.attr("href");
valor del atributo "href"

elements.outerHtml();
representación de cadena de una etiqueta Si necesita obtener rápidamente un selector de elementos, abra el panel de desarrollador (f12) en el navegador, haga clic derecho en el elemento, "ver código", haga clic derecho en la etiqueta, luego "Copiar" " Selector de copias”. Un selector de este tipo no será óptimo, pero sí muy adecuado para obtener resultados rápidos. Conclusión Estos son los conceptos básicos para trabajar con la biblioteca Jsoup. Pero esto es suficiente para analizar sitios. Para trabajar con confianza, todo lo que necesita es practicar escribiendo selectores en sitios reales. Ps Esta biblioteca se utiliza para resolver un problema grande en el nivel 38. Analizando html con la biblioteca jsoup - 1Analizando html con la biblioteca jsoup - 3
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION