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