2010-11-10 6 views
14

Estoy usando Jsoup para extraer la URL de una página web. El atributo href de esas URLs son relativos como:¿Cómo extraer la URL absoluta de los enlaces HTML relativos usando Jsoup?

<a href="/text">example</a> 

Aquí es mi intento:

Document document = Jsoup.connect(url).get(); 
Elements results = document.select("div.results"); 
Elements dls = results.select("dl"); 
for (Element dl : dls) { 
    String url = dl.select("a").attr("href"); 
} 

Esto funciona bien, pero si uso

String url = dl.select("a").attr("abs:href"); 

Para obtener la URL absoluta como http://example.com/text, no está funcionando. ¿Cómo puedo obtener la URL absoluta?

+0

¿Dónde está el ejemplo html? No podemos ayudarte adivinando ... –

Respuesta

15

Necesita Element#absUrl().

String url = dl.select("a").absUrl("href"); 

Puede por cierto acortar el selecto:

Document document = Jsoup.connect(url).get(); 
Elements links = document.select("div.results dl a"); 
for (Element link : links) { 
    String url = link.absUrl("href"); 
} 
8

String url = dl.select("a").absUrl("href");

no es correcta porque no regresará dl.select("a") un solo elemento, sino una colección. Que necesita para obtener los elementos por el índice

por ejemplo:

Elements elems = dl.select("a"); 
Element a1 = elems.get(0); //0 is the index first element increasing to (elems.size()-1) 
now you can do 
a1.absUrl("href"); 

Si está seguro de sólo un elemento será el resultado de la selecta anterior, o que el elemento que desee será la primera, se puede:

String url = dl.select("a").get(0).absUrl("href"); 

lo que también es igual a

String url = dl.select("a").first().absUrl("href"); 

no tiene por qué ser el fi primer elemento de todos modos, siempre puede reemplazar el 0 en String url = dl.select("a").get(0).absUrl("href"); con el índice de su elemento. O use una selección que sea más específica que solo dará como resultado un elemento.

Cuestiones relacionadas