将抓取的网址转换为真实网址的最安全的方法是什么?

时间:2014-11-09 01:49:40

标签: java relative-url

我抓了一个网站,在页面上找到这些链接:

index.html
bla.html
/index.html
A.com/test.html
http://wwww.B.com/bla.html

如果我知道当前页面是www.A.com/some/path,我该如何将这些链接转换为"真实网址"有效。因此,在每种情况下,网址都应转换为:

index.html => http://www.A.com/some/path/index.html
bla.html => http://www.A.com/some/path/bla.html
/index.html => http://www.A.com/index.html
A.com/test.html => http://www.A.com/test.html
http://wwww.B.com/bla.html => http://wwww.B.com/bla.html

将这些页面上的链接转换为完全限定的网址名称的最有效方法是什么?

2 个答案:

答案 0 :(得分:1)

使用java.net.URL类:

URL BASE_PATH = new URL("http://www.A.com/some/path");
String RELATIVE_PATH = "index.html";
URL absolute = new URL(BASE_PATH, RELATIVE_PATH);

它将解析基本路径的相对URL。如果相对URL实际上是绝对URL,则它将返回它。

答案 1 :(得分:1)

@ Brigham的答案是正确但不完整的。

问题在于,您抓取网址的页面可能会在<base>中包含<head>元素。此基本网址可能显着与您从中提取网页的网址不同。

例如:

<!DOCTYPE html> 
<html>
  <head>
    <base href="http://www.example.com/">
    ...
  </head>
  <body>
    ...
  </body>
</html>

...部分中,相对于base网址而非原始网页网址,将解析所有相对网址。


这意味着如果你想要解决&#34;刮掉&#34;在所有情况下,网址都是正确的,您还需要查找任何<base>元素,并且需要搜索&#34;抓取&#34;。