2013-10-05 2 views
0

Я хочу извлечь полную ссылку из файла HTML. Полная ссылка Я имею в виду абсолютные ссылки. Для этой цели я использовал Тику. Вот мой код:Получение абсолютного URL-адреса с веб-страницы

URL url = new URL("http://www.domainname.com/"); 
InputStream input = url.openStream(); 
LinkContentHandler linkHandler = new LinkContentHandler(); 
ContentHandler textHandler = new BodyContentHandler(); 
ToHTMLContentHandler toHTMLHandler = new ToHTMLContentHandler(); 
TeeContentHandler teeHandler = new TeeContentHandler(linkHandler, 
     textHandler, toHTMLHandler); 
Metadata metadata = new Metadata(); 
ParseContext parseContext = new ParseContext(); 
HtmlParser parser = new HtmlParser(); 
parser.parse(input, teeHandler, metadata, parseContext); 
System.out.println("title:\n" + metadata.get("title")); 
for (Link link : linkHandler.getLinks()) { 
    System.out.println(link.getUri()); 
} 

Это дало мне относительный URL как /index.html или документы/США/economicreport.html, но абсолютный адрес в этом случае http://domainname.com/index.html.

Как я могу получить всю ссылку правильно, означает полную ссылку, включая доменное имя? Как я могу это сделать на Java?

+0

Извините, Андрей, я буду помнить об этом в будущем. – Alex

+0

Вы открываете поток для получения URL-адреса? –

+0

Каковы ссылки, написанные на странице HTML? Если они родственны там, не так уж странно, что вы также получаете относительные ссылки от парсера, не так ли? –

ответ

0

Если вы сохранили URL базы сайта в URL, должно работать:

URL url = new URL("http://www.domainname.com/"); 
String givenUrl = ""; //This is the parsed address 

if (givenUrl.charAt(0) == '/') { 
    String absoluteUrl = url + givenURL; 
} else { 
    String absoluteUrl = givenUrl; 
} 
+2

Ваш 'absoluteUrl' недоступен (и, следовательно, будет полностью удален компилятором) вне вашего оператора if-else –

0

Немного лучше, чем предыдущий, но только чуть-чуть, это

URL targetDocumentUrl = new URL("http://www.domainname.com/content.html"); 
String parsedUrl = link.getURI(); 
String absoluteLink = new URL(targetDocumentUrl, parsedURL); 

Тем не менее, до сих пор не является хорошим решением, поскольку у него есть проблемы, когда html-документ имеет следующий тег: base href = "/" и анализируемая ссылка относительна и начинается с "../".

Конечно, вы можете обойти это несколькими способами, но они связаны с некоторой работой, такой как реализация ContentHandler. Я должен думать, что для чего-то такого базового должен быть простой способ сделать это с Tika LinkContentHandler.

Смежные вопросы