Java爬虫的相对路径转绝对路径

最近在做个HTMLParser抓取网页内容;
有些网页的链接写的都是相对路径;
在优快云上找到的,记录一下。


@SuppressWarnings("finally")
public static String getAbsoluteURL(String baseURI, String relativePath){
String abURL=null;
try {
URI base=new URI(baseURI);//基本网页URI
URI abs=base.resolve(relativePath);//解析于上述网页的相对URL,得到绝对URI
URL absURL=abs.toURL();//转成URL
System.out.println(absURL);
abURL = absURL.toString();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
} finally{
return abURL;
}
}
<think>好的,我现在需要回答用户关于相对路径绝对路径的区别及用法的问题。首先,我得回顾一下用户提供的引用内容,确保准确引用信息。 首先,根据引用[1]、[2]、[3]和[4],相对路径绝对路径的核心区别在于是否从根目录或协议开始。绝对路径是完整的路径,而相对路径是相对于当前文件的位置。比如,在文件系统中,绝对路径可能是C:/project/index.html,而相对路径如果是images/logo.png,就会基于当前文件的目录来解析。 接下来,使用场景方面,引用[3]提到相对路径适用于本地开发和部署,便于维护,而绝对路径在需要准确定位资源时更可靠,比如外部链接。例如,网页中的内部链接用相对路径,外部资源用绝对路径,如引用[5]中的例子,用parse.urljoin处理相对路径绝对路径,这在爬虫中很常见。 然后,路径解析部分,引用[4]指出绝对路径通常以斜杠或盘符开头,而相对路径则是其余情况。这在编程中处理路径时需要注意,比如Java中的判断方法。 用户可能还关心URL中的路径,比如引用[2]中的例子,http://www.baidu.com/index.html是绝对URL,而相对路径如../css/style.css会基于当前页面URL解析。这部分需要结合引用[5]提到的转换方法,说明如何将相对为绝对。 最后,要确保回答结构清晰,分点说明区别、使用场景和解析规则,并附上相关引用。同时,生成的问题要覆盖用户可能想深入了解的部分,比如如何转换路径、优缺点比较等。</think>### 相对路径绝对路径的区别及用法 #### **一、核心区别** 1. **绝对路径** - **定义**:完整描述文件或资源的路径,从根目录(文件系统)或协议(URL)开始,可准确定位资源[^2][^3]。 - **示例**: - 文件系统:`C:/project/index.html` - URL:`https://example.com/images/logo.png` 2. **相对路径** - **定义**:基于当前文件或目录的位置计算目标资源的路径,不依赖根目录或完整协议[^4]。 - **示例**: - 文件系统:若当前文件在`C:/project/`,`images/logo.png`指向`C:/project/images/logo.png` - URL:若当前页面是`https://example.com/blog/`,`../css/style.css`指向`https://example.com/css/style.css` --- #### **二、使用场景** | **类型** | **适用场景** | **典型示例** | |--------------|-----------------------------------------------------------------------------|-----------------------------------------------------------------------------| | **绝对路径** | 1. 需要跨系统或外部资源引用<br>2. 明确指定资源位置避免歧义 | 网页中引用外部CDN资源:`<script src="https://cdn.jsdelivr.net/npm/vue@3"></script>` | | **相对路径** | 1. 本地开发或内部文件引用<br>2. 需要路径灵活性(如迁移服务器时路径不变) | 项目内引用同级目录文件:`<img src="images/header.jpg">` [^4] | --- #### **三、路径解析规则** 1. **文件系统** - **绝对路径**:以盘符(Windows)或斜杠(Linux/macOS)开头,如`/usr/local/bin`。 - **相对路径**:以`.`(当前目录)或`..`(上级目录)开头,或直接写子目录名,如`./config/settings.json`。 2. **URL** - **绝对路径**:包含协议(如`http://`)和完整域名,如`http://example.com/api/data`。 - **相对路径**:依赖当前页面URL,如`/api/data`会基于当前域名解析为`http://example.com/api/data`[^5]。 3. **编程中的转换** - 可通过工具函数将相对路径绝对路径。例如Python的`urljoin`: ```python from urllib.parse import urljoin base_url = "http://example.com/blog/" print(urljoin(base_url, "../css/style.css")) # 输出:http://example.com/css/style.css ``` 此方法常用于网络爬虫处理链接[^5]。 --- #### **四、优缺点对比** | **类型** | **优点** | **缺点** | |--------------|-----------------------------------|-----------------------------------| | **绝对路径** | 定位精准,不易出错 | 路径冗长,迁移时需修改 | | **相对路径** | 灵活简洁,便于维护 | 依赖上下文,易因目录变动导致错误 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值