[英]What is the safest way to convert scraped URLs to real URLs?
我刮了一个网站,然后在页面上找到以下链接:
index.html
bla.html
/index.html
A.com/test.html
http://wwww.B.com/bla.html
如果我知道当前页面为www.A.com/some/path,则如何有效地将这些链接转换为“真实的Urls”。 因此,在每种情况下,URL都应转换为:
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名称的最有效方法是什么?
使用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,它将返回它。
@Brigham的答案是正确的但不完整。
问题在于,您从中抓取URL的页面可能在<head>
包含一个<base>
元素。 该基本URL可能与您从中获取页面的URL 明显不同。
例如:
<!DOCTYPE html>
<html>
<head>
<base href="http://www.example.com/">
...
</head>
<body>
...
</body>
</html>
在...
部分中,将相对于base
URL而不是原始页面URL解析任何相对URL。
这意味着如果要在所有情况下都正确解析“已抓取”的URL,则在“抓取”时还需要查找任何<base>
元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.