Получение абсолютного URL с веб-страницы

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

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 или documents/US/economicreport.html, но абсолютный URL-адрес в этом случае - http://domainname.com/index.html.

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

2 ответа

Если вы сохранили 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;
}

Чуть лучше предыдущего, но ненамного

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

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

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

Другие вопросы по тегам