为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中转换相对于绝对 URL

在 Go 中转换相对于绝对 URL

Go
ITMISS 2023-05-15 14:57:07
我正在编写一个小型网络爬虫,我正在爬网的网站上的很多链接都是相对的(例如/robots.txt,它们是 )。如何将这些相对 URL 转换为绝对 URL(所以/robots.txt=> http://google.com/robots.txt)?Go 是否有内置的方法来做到这一点?
查看完整描述

3 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

是的,标准库可以用net/url包来做到这一点。示例(来自标准库):


package main


import (

    "fmt"

    "log"

    "net/url"

)


func main() {

    u, err := url.Parse("../../..//search?q=dotnet")

    if err != nil {

        log.Fatal(err)

    }

    base, err := url.Parse("http://example.com/directory/")

    if err != nil {

        log.Fatal(err)

    }

    fmt.Println(base.ResolveReference(u))

}

请注意,您只需要解析一次绝对 URL,然后就可以反复重用它。


查看完整回答
反对 回复 2023-05-15
?
慕沐林林

TA贡献2016条经验 获得超9个赞


您还可以使用baseURL 的Parse方法来提供相对或绝对 URL。


package main


import (

    "fmt"

    "log"

    "net/url"

)


func main() {

    // parse only base url

    base, err := url.Parse("http://example.com/directory/")

    if err != nil {

        log.Fatal(err)

    }


    // and then use it to parse relative URLs

    u, err := base.Parse("../../..//search?q=dotnet")

    if err != nil {

        log.Fatal(err)

    }


    fmt.Println(u.String())

}

在Go Playground上试试吧。



查看完整回答
反对 回复 2023-05-15
?
万千封印

TA贡献1891条经验 获得超3个赞

我认为您正在寻找ResolveReference 方法。


import (

    "fmt"

    "log"

    "net/url"

)


func main() {

    u, err := url.Parse("../../..//search?q=dotnet")

    if err != nil {

        log.Fatal(err)

    }

    base, err := url.Parse("http://example.com/directory/")

    if err != nil {

        log.Fatal(err)

    }

    fmt.Println(base.ResolveReference(u))

}

// gives: http://example.com/search?q=dotnet

我也将它用于我的爬虫,并且非常有效!


查看完整回答
反对 回复 2023-05-15
  • 3 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信