Comenzando con Jsoup

Extrae las URL y los títulos de los enlaces

Jsoup se puede usar para extraer fácilmente todos los enlaces de una página web. En este caso, podemos usar Jsoup para extraer solo los enlaces específicos que queremos, aquí, los que están en un encabezado h3 en una página. También podemos obtener el texto de los enlaces.

Document doc = Jsoup.connect("http://stackoverflow.com").userAgent("Mozilla").get();
for (Element e: doc.select("a.question-hyperlink")) {
    System.out.println(e.attr("abs:href"));
    System.out.println(e.text());
    System.out.println();
}

Esto da el siguiente resultado:

http://stackoverflow.com/questions/12920296/past-5-week-calculation-in-webi-bo-4-0
Past 5 week calculation in WEBI (BO 4.0)?

http://stackoverflow.com/questions/36303701/how-to-get-information-about-the-visualized-elements-in-listview
How to get information about the visualized elements in listview?

[...]

Que esta pasando aqui:

  • Primero, obtenemos el documento HTML de la URL especificada. Este código también establece el encabezado del Agente de usuario de la solicitud en “Mozilla”, de modo que el sitio web sirva la página que normalmente serviría a los navegadores.

  • Luego, use select(...) y un bucle for para obtener todos los enlaces a las preguntas de Stack Overflow, en este caso enlaces que tienen la clase question-hyperlink.

  • Imprime el texto de cada enlace con .text() y el href del enlace con attr("abs:href"). En este caso, usamos abs: para obtener la URL absoluta, es decir. con el dominio y protocolo incluido.

Extraer URL completa de HTML parcial

Seleccionar solo el valor del atributo de un enlace: href devolverá la URL relativa.

   String bodyFragment = 
          "<div><a href=\"/documentation\">Stack Overflow Documentation</a></div>";


    Document doc = Jsoup.parseBodyFragment(bodyFragment);
    String link = doc
            .select("div > a")
            .first()
            .attr("href");
    
    System.out.println(link);

Producción

/documentation

Pasando el URI base al parse y usando el método método absUrl en lugar de attr, podemos extraer la URL completa.

    Document doc = Jsoup.parseBodyFragment(bodyFragment, "http://stackoverflow.com");
    
    String link = doc
                .select("div > a")
                .first()
                .absUrl("href");
    
    System.out.println(link);

Producción

https://www.wikiod.com/es/docs/

Extrae los datos del archivo del documento HTML

Jsoup se puede usar para manipular o extraer datos de un archivo local que contiene HTML. filePath es la ruta de un archivo en el disco. ENCODING es el nombre deseado del conjunto de caracteres, p. “Windows-31J”. es opcional

 // load file
    File inputFile = new File(filePath);
    // parse file as HTML document
    Document doc = Jsoup.parse(filePath, ENCODING);
    // select element by <a> 
    Elements elements = doc.select("a");