从网页中检索绝对URL

时间:2013-10-05 10:28:04

标签: java html apache-tika

我想从HTML文件中提取完整链接。完整链接我的意思是绝对链接。我为此目的使用了Tika。这是我的代码:

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

这给了我相对网址,例如/index.html或documents / US / economicreport.html,但在这种情况下,绝对网址为http://domainname.com/index.html

如何正确获取所有链接意味着包含域名的完整链接?我怎么能用Java做到这一点?

2 个答案:

答案 0 :(得分:0)

如果您已将基本网站网址存储在网址中,则以下内容应有效:

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

答案 1 :(得分: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。