0

我想从 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 中做到这一点?

4

2 回答 2

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;
}
于 2013-10-05T10:47:51.417 回答
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 来做到这一点。

于 2015-05-29T07:22:35.027 回答