7

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

4

2 回答 2

11

是的,标准库可以通过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 一次,然后就可以反复使用它。

于 2018-12-09T13:21:08.773 回答
4

在@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())
}

在Go Playground上尝试一下。

于 2021-04-11T22:04:45.423 回答