Python笔记之根据相对路径的网址链接提取并补充完整的网址链接

参数说明:

  • response_url,需要补充的相对路径,例如/index/news1.html、./index/news2.html、//index/news1.html
  • href,当前网址所属主页网址,例如http://www.abc.com/news_list
  • return_href,补充完成后传回的完整网址链接,例如http://www.abc.com/news_list/index/news1.html
def handleHref(response_url, href):
    """
    1.(无)开头表示当前目录下的
    2.(/)开头的目录表示该目录为根目录的一个子目录
    3.(./)开头的目录表示该目录为当前目录(当前目录所在的目录)的一个子目录
    4.(../)开头的目录表示该目录为当前目录的父目录
    5.(//)开头的目录表示和当前页面使用同一种协议http/https
    6.(?)开头的表示当前目录下补充?及其后面的参数
    """
    if href.startswith("//"):
        # 获取response_url请求协议
        http = urlparse(response_url)[0]
        return_href = http + ":" + href
    elif href.startswith("/"):
        hostname = urlparse(response_url).netloc
        prefix = urlparse(response_url).scheme + "://" + hostname
        return_href = prefix + href
    elif href.startswith("./"):
        prefix = dirname(response_url) + "/"
        return_href = prefix + href.replace("./", "")
    elif href.startswith("../"):
        dir_name = dirname(response_url) + "/"
        new_prefix_list = dir_name.split("/")[0:len(dir_name.split("/")) - href.count("../") - 1]
        new_prefix = ""
        for p in new_prefix_list:
            new_prefix = new_prefix + p + "/"
        return_href = new_prefix + href.replace("../", "")

    elif href.startswith("?"):
        # 有些href链接是?开头的,例如,?page=1&id=1,这就需要拿到response_url的无参数链接
        url_dir = dirname(response_url)
        url_base = basename(response_url).replace(" ", "")
        url1 = url_base.split("?")
        return_href = url_dir + "/" + url1[0] + href
    else:
        # 其它特殊情况,这里是自己随便定的规则,可以自定义规则
        prefix = dirname(response_url) + "/"
        return_href = prefix + href

    return return_href
  • 15
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

code_space

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值