亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果缺少 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 關注
  • 172 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號