Jsoup Es
Jsoup Es
#jsoup
Tabla de contenido
Acerca de 1
Observaciones 2
Soporte de JavaScript 2
Descargar 2
Versiones 3
Examples 3
Examples 6
Parámetros 8
Observaciones 8
Examples 8
Examples 10
Capítulo 5: Selectores 13
Observaciones 13
Examples 14
Creditos 20
Acerca de
You can share this PDF with anyone you feel could benefit from it, downloaded the latest version
from: jsoup
It is an unofficial and free Jsoup ebook created for educational purposes. All the content is
extracted from Stack Overflow Documentation, which is written by many hardworking individuals at
Stack Overflow. It is neither affiliated with Stack Overflow nor official Jsoup.
The content is released under Creative Commons BY-SA, and the list of contributors to each
chapter are provided in the credits section at the end of this book. Images may be copyright of
their respective owners unless otherwise specified. All trademarks and registered trademarks are
the property of their respective company owners.
Use the content presented in this book at your own risk; it is not guaranteed to be correct nor
accurate, please send your feedback and corrections to [email protected]
https://riptutorial.com/es/home 1
Capítulo 1: Empezando con Jsoup
Observaciones
Jsoup es una biblioteca de análisis de HTML y extracción de datos para Java, enfocada en la
flexibilidad y la facilidad de uso. Se puede usar para extraer datos específicos de páginas HTML,
lo que comúnmente se conoce como "web scraping", así como modificar el contenido de las
páginas HTML y "limpiar" HTML no confiable con una lista blanca de etiquetas y atributos
permitidos.
Soporte de JavaScript
Jsoup no admite JavaScript y, debido a esto, cualquier contenido generado dinámicamente o
que se agregue a la página después de la carga de la página no se puede extraer de la página. Si
necesita extraer el contenido que se añade a la página con JavaScript, hay algunas opciones
alternativas:
• Use una biblioteca que admita JavaScript, como Selenium, que usa un navegador web real
para cargar páginas, o HtmlUnit.
• Ingeniero inverso cómo la página carga sus datos. Normalmente, las páginas web que
cargan datos dinámicamente lo hacen a través de AJAX y, por lo tanto, puede consultar la
pestaña de red de las herramientas de desarrollo de su navegador para ver desde dónde se
están cargando los datos y luego usar esas URL en su propio código. Vea cómo raspar las
páginas AJAX para más detalles.
Descargar
Jsoup está disponible en Maven como org.jsoup.jsoup:jsoup , si está utilizando Gradle (por
ejemplo, con Android Studio), puede agregarlo a su proyecto agregando lo siguiente a su sección
de dependencias de build.gradle :
compile 'org.jsoup:jsoup:1.8.3'
<dependency>
https://riptutorial.com/es/home 2
<!-- jsoup HTML parser library @ http://jsoup.org/ -->
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.8.3</version>
</dependency>
Jsoup también está disponible como JAR descargable para otros entornos.
Versiones
1.9.2 2016-05-17
1.8.3 2015-08-02
Examples
Extrae las URL y títulos de los enlaces.
Jsoup se puede utilizar 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 de
un encabezado h3 en una página. También podemos obtener el texto de los enlaces.
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?
[...]
• Luego, use select(...) y un bucle for para obtener todos los enlaces a las preguntas de
https://riptutorial.com/es/home 3
desbordamiento de pila, en este caso los enlaces que tienen el question-hyperlink clase.
• Imprima 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
incluidos.
Seleccionando solo el valor del atributo de un enlace: href devolverá la URL relativa.
String bodyFragment =
"<div><a href=\"/documentation\">Stack Overflow Documentation</a></div>";
System.out.println(link);
Salida
/documentation
Al pasar el URI base al método de parse y usar el método absUrl lugar de attr , podemos extraer
la URL completa.
System.out.println(link);
Salida
http://stackoverflow.com/documentation
Jsoup se puede usar para manipular o extraer datos de un archivo en local que contiene HTML.
filePath es la ruta de un archivo en el disco. ENCODING se desea Juego de caracteres Nombre por
ejemplo "Windows-31J". Es opcional.
// load file
File inputFile = new File(filePath);
https://riptutorial.com/es/home 4
// parse file as HTML document
Document doc = Jsoup.parse(filePath, ENCODING);
// select element by <a>
Elements elements = doc.select("a");
https://riptutorial.com/es/home 5
Capítulo 2: Análisis de páginas generadas en
Javascript
Examples
Análisis de la página generada por JavaScript con Jsoup y HtmUnit
<html>
<head>
<script src="loadData.js"></script>
</head>
<body onLoad="loadData()">
<div class="container">
<table id="data" border="1">
<tr>
<th>col1</th>
<th>col2</th>
</tr>
</table>
</div>
</body>
</html>
loadData.js
Col1 Col2
0.0 0.1
1.0 1.1
https://riptutorial.com/es/home 6
// load source from file
Document doc = Jsoup.parse(new File("page.html"), "UTF-8");
// print results
System.out.println(col.ownText());
Salida
(vacío)
¿Que pasó?
Jsoup analiza el código fuente como se entrega desde el servidor (o en este caso, cargado desde
un archivo). No invoca acciones del lado del cliente, como la manipulación de JavaScript o CSS
DOM. En este ejemplo, las filas y columnas nunca se agregan a la tabla de datos.
// print results
System.out.println(col.ownText());
// clean up resources
webClient.close();
Salida
0.0
0.1
1.0
1.1
https://riptutorial.com/es/home 7
Capítulo 3: Formato de salida HTML
Parámetros
Parámetro Detalle
Document.OutputSettings
outline(boolean) Habilitar o deshabilitar el modo de esquema HTML.
Observaciones
Jsoup 1.9.2 API
Examples
Mostrar todos los elementos como bloque
De forma predeterminada, Jsoup mostrará solo los elementos de nivel de bloque con un salto de
línea posterior. Los elementos en línea se muestran sin un salto de línea.
<select name="menu">
<option value="foo">foo</option>
<option value="bar">bar</option>
</select>
System.out.println(doc.html());
Resultados en:
<html>
<head></head>
<body>
<select name="menu"> <option value="foo">foo</option> <option value="bar">bar</option>
</select>
</body>
</html>
https://riptutorial.com/es/home 8
Para mostrar la salida con cada elemento tratado como un elemento de bloque, la opción de
outline debe estar habilitada en los OutputSettings de OutputSettings del documento.
doc.outputSettings().outline(true);
System.out.println(doc.html());
Salida
<html>
<head></head>
<body>
<select name="menu">
<option value="foo">foo</option>
<option value="bar">bar</option>
</select>
</body>
</html>
https://riptutorial.com/es/home 9
Capítulo 4: Iniciar sesión en sitios web con
Jsoup
Examples
Una simple solicitud POST de autenticación con Jsoup
A continuación se muestra una solicitud POST simple con datos de autenticación, tenga en
cuenta que el campo de username y password variará según el sitio web:
La mayoría de los sitios web requieren un proceso mucho más complicado que el demostrado
anteriormente.
A continuación se muestra un ejemplo de solicitud que lo conectará con el sitio web de GitHub
https://riptutorial.com/es/home 10
HashMap<String, String> cookies = new HashMap<>(loginForm.cookies()); // save the cookies to
be passed on to next request
System.out.println(homePage.parse().html());
En este ejemplo, iniciaremos sesión en el sitio web de GitHub utilizando la clase FormElement .
// # Go to login page
Connection.Response loginFormResponse = Jsoup.connect(LOGIN_FORM_URL)
.method(Connection.Method.GET)
.userAgent(USER_AGENT)
.execute();
https://riptutorial.com/es/home 11
// # Now send the form for login
Connection.Response loginActionResponse = loginForm.submit()
.cookies(loginFormResponse.cookies())
.userAgent(USER_AGENT)
.execute();
System.out.println(loginActionResponse.parse().html());
Todos los datos del formulario son manejados por la clase FormElement para nosotros (incluso la
detección del método del formulario). Una conexión ya hecha se crea cuando se invoca el método
de envío FormElement # . Todo lo que tenemos que hacer es completar esta conexión con
encabezados adicionales (cookies, usuario-agente, etc.) y ejecutarla.
https://riptutorial.com/es/home 12
Capítulo 5: Selectores
Observaciones
Un selector es una cadena de selectores simples, separados por combinadores. Los selectores
no distinguen entre mayúsculas y minúsculas (incluidos los elementos, los atributos y los valores
de los atributos).
El selector universal (*) está implícito cuando no se suministra ningún selector de elementos (es
decir, * .header y .header son equivalentes).
* cualquier elemento *
elementos con el
tag nombre de etiqueta div
dado
Elementos de tipo E
ns|E en el espacio de fb|name finds <fb:name> elements
nombres ns.
elementos con ID de
#id div#wrap, #logo
atributo de "id"
elementos con un
.class nombre de clase de div.left, .result
"clase"
Elementos con un
[attr] atributo llamado "attr" a[href], [title]
(con cualquier valor)
elementos con un
nombre de atributo
que comience con
[^attrPrefix] "attrPrefix". Úsalo [^data-], div[^data-]
para encontrar
elementos con
datasets HTML5
Elementos con un
[attr=val] atributo llamado "attr" img[width=500], a[rel=nofollow]
y valor igual a "val"
https://riptutorial.com/es/home 13
Modelo Partidos Ejemplo
elementos con un
atributo llamado "attr"
[attr^=valPrefix] a[href^=http:]
y valor que comienza
con "valPrefix"
elementos con un
atributo llamado
[attr$=valSuffix] "attr", y el valor img[src$=.png]
termina con
"valSuffix"
Elementos con un
atributo llamado "attr"
[attr*=valContaining] y un valor que a[href*=/search/]
contiene
"valContaining"
Elementos con un
atributo llamado "attr"
[attr~=regex] y un valor que img[src~=(?i)\.(png|jpe?g)]
coincide con la
expresión regular
Lo anterior se puede
combinar en div.header[title]
cualquier orden.
Examples
Selección de elementos mediante selectores de CSS
https://riptutorial.com/es/home 14
"</html>";
// You can also select within elements, e.g. anchors with a href attribute
// within the third paragraph.
Element link = thirdParagraph.select("a[href]");
// or the first <h1> element in the document body
Element headline = doc.select("body").first().select("h1").first();
https://riptutorial.com/es/home 15
// Connect to URL and extract source code
Document doc = Jsoup.connect("http://stackoverflow.com/").get();
// display results
System.out.printf("%s = %s%n", twitterTag, content);
}
Salida
twitter:site =
twitter:site:id =
twitter:creator =
twitter:creator:id =
twitter:description = Q&A for professional and enthusiast programmers
twitter:title = Stack Overflow
twitter:image =
twitter:image:alt =
twitter:player =
twitter:player:width =
twitter:player:height =
twitter:player:stream =
twitter:app:name:iphone =
twitter:app:id:iphone =
twitter:app:url:iphone =
twitter:app:name:ipad =
twitter:app:id:ipad =
twitter:app:url:ipadt =
twitter:app:name:googleplay =
twitter:app:id:googleplay =
twitter:app:url:googleplay =
https://riptutorial.com/es/home 16
Capítulo 6: Web crawling con jsoup
Examples
Extraer direcciones de correo electrónico y enlaces a otras páginas.
Jsoup se puede usar para extraer enlaces y direcciones de correo electrónico de una página web,
por lo tanto, "bot de recopilador de direcciones de correo electrónico web" Primero, este código
usa una expresión regular para extraer las direcciones de correo electrónico, y luego utiliza los
métodos proporcionados por Jsoup para extraer las URL de los enlaces. la página.
Pattern p = Pattern.compile("[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\\.[a-zA-Z0-9-.]+");
Matcher matcher = p.matcher(doc.text());
Set<String> emails = new HashSet<String>();
while (matcher.find()) {
emails.add(matcher.group());
}
System.out.println(emails);
System.out.println(links);
Este código también se puede extender fácilmente para visitar recursivamente esas URL y extraer
datos de páginas vinculadas. También se podría usar fácilmente con una expresión regular
diferente para extraer otros datos.
https://riptutorial.com/es/home 17
// create HTML with JavaScript data
StringBuilder html = new StringBuilder();
html.append("<!DOCTYPE html> <html> <head> <title>Hello Jsoup!</title>");
html.append("<script>");
html.append("StackExchange.docs.comments.init({");
html.append("highlightColor: '#F4A83D',");
html.append("backgroundColor:'#FFF',");
html.append("});");
html.append("</script>");
html.append("<script>");
html.append("document.write(<style type='text/css'>div,iframe { top: 0; position:absolute;
}</style>');");
html.append("</script>\n");
html.append("</head><body></body> </html>");
Salida
<script>StackExchange.docs.comments.init({highlightColor:
'#F4A83D',backgroundColor:'#ddd',});</script>
En este ejemplo extraeremos todos los enlaces web de un sitio web. Estoy utilizando
http://stackoverflow.com/ para ilustración. Aquí se utiliza la recursión, donde se analiza la página
de cada enlace obtenido para detectar la presencia de una anchor tag y ese enlace se envía
nuevamente a la misma función.
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
https://riptutorial.com/es/home 18
public class readAllLinks {
if (links.isEmpty()) {
return;
}
}
}
El programa tardará mucho tiempo en ejecutarse dependiendo de su sitio web. El código anterior
se puede ampliar para extraer datos (como títulos de páginas o texto o imágenes) de un sitio web
en particular. Le recomendaría que revise los términos de uso de la compañía antes de abrir su
sitio web.
El ejemplo usa la biblioteca JSoup para obtener los enlaces, también puede obtener los enlaces
usando your_url/sitemap.xml .
https://riptutorial.com/es/home 19
Creditos
S.
Capítulos Contributors
No
Empezando con
1 Alice, Community, Jeffrey Bosboom, JonasCz, Zack Teater
Jsoup
Análisis de páginas
2 generadas en Zack Teater
Javascript
Formato de salida
3 Zack Teater
HTML
Iniciar sesión en
4 Joel Min, JonasCz, Stephan
sitios web con Jsoup
https://riptutorial.com/es/home 20