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 のような相対 URL が得られますが、この場合の絶対 URL はhttp://domainname.com/index.htmlです。

ドメイン名を含む完全なリンクを意味するすべてのリンクを正しく取得するにはどうすればよいですか? Javaでそれを行うにはどうすればよいですか?

4

2 に答える 2

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 に答える