2010-11-10 7 views
14

Sto usando Jsoup per estrarre l'URL di una pagina web. L'attributo href di quei URL del sono relative come:Come estrarre l'URL assoluto dai relativi collegamenti HTML usando Jsoup?

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

Ecco il mio tentativo:

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"); 
} 

Questo funziona bene, ma se uso

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

per ottenere l'URL assoluto come http://example.com/text, non funziona. Come posso ottenere l'URL assoluto?

+0

Dov'è l'html di esempio? Non possiamo aiutarti indovinando .... –

risposta

15

È necessario Element#absUrl().

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

È possibile dal modo in cui abbreviare il select:

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");

non è corretto perché dl.select("a") non restituirà un singolo elemento, ma un insieme. È necessario per ottenere gli elementi per indice

esempio:

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"); 

Se si è sicuri solo elemento risulterà dalla seleziona sopra, o che l'elemento che si desidera sarà il primo, è possibile:

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

che è anche uguale a

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

non deve essere il fi prima cosa, comunque, puoi sempre sostituire lo 0 in String url = dl.select("a").get(0).absUrl("href"); con l'indice del tuo elemento. Oppure usa una selezione che è più specifica e che si tradurrà in un solo elemento.