为了账号安全,请及时绑定邮箱和手机立即绑定

如果缺少 http://,则使用 url.ResolveReference() 解析错误的 URL

如果缺少 http://,则使用 url.ResolveReference() 解析错误的 URL

Go
慕丝7291255 2021-12-20 17:05:26
我已经构建了一个网络爬虫,它会在网站上搜索该页面上的所有链接,然后获取这些链接并在它们上搜索更多链接,直到整个页面被爬取为止。工作完美,直到我遇到一个特殊的网站。他们的链接问题:正常情况 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,请像对待其他任何人一样对待它。


查看完整回答
反对 回复 2021-12-20
  • 1 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号