在Go中转换相对于绝对URL

hiy*_*hiy 2 url go relative-url

我正在写一个小的网络爬虫,并且我正在爬虫的网站上的许多链接都是相对的(/robots.txt例如,它们是相对的)。如何将这些相对URL转换为绝对URL(因此/robots.txt=> http://google.com/robots.txt)?Go有内置的方法吗?

Kan*_*mov 6

在@Not_a_Golfer 的解决方案之上。

您还可以使用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())
}
Run Code Online (Sandbox Code Playgroud)

在Go Playground上尝试一下。


Not*_*fer 5

是的,标准库可以使用该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))
}
Run Code Online (Sandbox Code Playgroud)

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