gpt4 book ai didi

http - 如果 http ://is missing,使用 url.ResolveReference() 解析错误的 URL

转载 作者:IT王子 更新时间:2023-10-29 02:14:52 27 4
gpt4 key购买 nike

我构建了一个网络爬虫,它可以在网站上搜索该页面上的所有链接,然后获取该链接并在其中搜索更多链接,直到爬取整个页面。在我遇到一个特殊的站点之前一直运行良好。

链接问题:

正常情况 1:绝对路径如 ' http://www.example.com/test '

正常情况 2:相对路径,如 '/test'

有问题的新案例:没有 http://的绝对路径 - 只是 'www.example.com'

显示问题的示例代码:

package main

import (
"fmt"
"log"
"net/url"
)

func main() {

u, err := url.Parse("http://www.example.com")
if err != nil {
log.Fatal(err)
}
base, err := url.Parse("http://example.com/directory/")
if err != nil {
log.Fatal(err)
}

u2, err := url.Parse("www.example.com")
if err != nil {
log.Fatal(err)
}
base2, err := url.Parse("http://example.com/directory/")
if err != nil {
log.Fatal(err)
}

fmt.Println(base.ResolveReference(u))
fmt.Println(base2.ResolveReference(u2))
}

http://www.example.com
http://example.com/test/www.example.com

如您所见,第二行返回错误的 URL,因为如果缺少 http://,则绝对 URL 的测试是 u.IsAbs() = false ...

有什么解决办法吗?我必须每天测试 100.000 - 1.000.000 个链接,也许更多,并且它需要高性能。

最佳答案

不幸的是,没有真正的“修复”,因为如果你得到一个 href 这样的链接:

www.example.com

在一般情况下,它是不明确的:

http://host.tld/path/to/www.example.com
http://www.example.com

事实上,大多数浏览器都是这样对待链接的:

<a href="www.example.com">

像这样:

<a href="/current/path/www.example.com">

我建议您也这样做(因为这是此人网站的错误),如果您收到 404,请像对待其他任何人一样对待它。

关于http - 如果 http ://is missing,使用 url.ResolveReference() 解析错误的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35962971/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com