我已經構建了一個網絡爬蟲,它會在網站上搜索該頁面上的所有鏈接,然后獲取這些鏈接并在它們上搜索更多鏈接,直到整個頁面被爬取為止。工作完美,直到我遇到一個特殊的網站。他們的鏈接問題:正常情況 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 關注
- 172 瀏覽
添加回答
舉報
0/150
提交
取消