2010-11-10 31 views
14

Tôi đang sử dụng Jsoup để trích xuất URL của trang web. Các href thuộc tính của những người của URL là tương đối như:Làm thế nào để trích xuất URL tuyệt đối từ các liên kết HTML tương đối bằng cách sử dụng Jsoup?

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

Đây là nỗ lực của tôi:

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

này hoạt động tốt, nhưng nếu tôi sử dụng

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

để có được URL tuyệt đối như http://example.com/text, nó không hoạt động. Làm cách nào tôi có thể nhận được URL tuyệt đối?

+0

Ví dụ html ở đâu? Chúng tôi không thể giúp bạn bằng cách đoán .... –

Trả lời

15

Bạn cần Element#absUrl().

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

Bạn có thể bằng cách này rút ngắn chọn:

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

là không đúng vì dl.select("a") sẽ không trở lại một mục duy nhất mà là một bộ sưu tập. Bạn cần phải nhận các yếu tố của chỉ số

ví dụ:

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

Nếu bạn chắc chắn chỉ có một mục sẽ là kết quả của sự lựa chọn ở trên, hoặc rằng mục mà bạn muốn sẽ là người đầu tiên, bạn có thể:

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

Đó là cũng giống như

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

Nó không phải là fi Tuy nhiên, bạn luôn có thể thay thế 0 trong String url = dl.select("a").get(0).absUrl("href"); bằng chỉ mục của phần tử của bạn. Hoặc sử dụng lựa chọn cụ thể hơn sẽ chỉ dẫn đến một phần tử.

Các vấn đề liên quan