我已经构建了一个网络爬虫,它会在网站上搜索该页面上的所有链接,然后获取这些链接并在它们上搜索更多链接,直到整个页面被爬取为止。工作完美,直到我遇到一个特殊的网站。他们的链接问题:正常情况 1:绝对路径,如“ http://www.example.com/test ”正常情况 2:相对路径,如 '/test'有问题的新案例:没有 http:// 的绝对路径 - 只是“www.example.com”显示问题的示例代码:package mainimport ( "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.comhttp://example.com/test/www.example.com正如您所看到的,第二行返回了错误的 URL,因为如果 http:// 丢失,则绝对 URL 的测试为 u.IsAbs() = false ...任何想法如何解决这个问题?我必须每天测试 100.000 - 1.000.000 个链接,也许更多,并且需要高性能。
1 回答

慕婉清6462132
TA贡献1804条经验 获得超2个赞
不幸的是,这并没有真正的“修复”,因为如果你得到一个带有这样的 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,请像对待其他任何人一样对待它。
- 1 回答
- 0 关注
- 174 浏览
添加回答
举报
0/150
提交
取消