0

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

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

如果我知道当前页面是 www.A.com/some/path,我怎样才能有效地将这些链接转换为“真正的 Urls”。因此,在每种情况下,网址都应转换为:

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

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

4

2 回答 2

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,它将返回它。

于 2014-11-09T01:55:09.860 回答
1

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

问题是您从中抓取 URL 的页面可能<base>包含<head>. 此基本 URL 可能与您从中获取页面的 URL 有很大不同。

例如:

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

在这些...部分中,任何相对 URL 都将相对于baseURL 而不是原始页面 URL 进行解析。


这意味着如果您想在所有情况下正确解析“抓取”的 URL,您还需要在<base>“抓取”时查找任何元素。

于 2014-11-09T03:28:36.597 回答