猿问

在 Go 中转换相对于绝对 URL

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



ITMISS
浏览 137回答 3
3回答

LEATH

是的,标准库可以用net/url包来做到这一点。示例(来自标准库):package mainimport (    "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,然后就可以反复重用它。

慕沐林林

您还可以使用baseURL 的Parse方法来提供相对或绝对 URL。package mainimport (    "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上试试吧。

万千封印

我认为您正在寻找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我也将它用于我的爬虫,并且非常有效!
随时随地看视频慕课网APP

相关分类

Go
我要回答