[Java] 网页相对URL解析

在用爬虫解析页面的URL时,经常会碰到存在相对URL的情况,比如包含/、./和../的情况,需要做转换:

/**
     * 解析网页中的相对URL
     * @param link 网页中的链接,如href
     * @param sourceUrl 网页自身的URL
     * @return 转换后的URL
     */
    public static String convertLinkToUrl(String link, String sourceUrl) {
        String url = link;
        if (!link.matches("http://.*") && !link.matches("https://.*")) {
            // 截取原始URL中最后一个“/”之前的内容,
            int lastSeparatorIndex = sourceUrl.lastIndexOf("/");
            String thisUrl = sourceUrl;
            if(lastSeparatorIndex > 0) {
                thisUrl = sourceUrl.substring(0,lastSeparatorIndex);
            }

            // 处理相对路径
            while(link.startsWith("/") || link.startsWith(".")) {
                if(link.startsWith("./")) {
                    link = link.replace("./","");
                }
                if(link.startsWith("/")) {
                    link = link.replace("/","");
                }
                if(link.startsWith("../")) {
                    link = link.replace("../","");
                    lastSeparatorIndex = thisUrl.lastIndexOf("/");
                    if(lastSeparatorIndex > 0) {
                        thisUrl = sourceUrl.substring(0,lastSeparatorIndex);
                    }
                }
            }

            // 合成最终的绝对路径
            url = thisUrl + "/" + link;
        }

        return url;
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值