爬蟲任務(wù)太大怕失控?用 Colly 的
MaxDepth
限制爬取深度,就像給爬蟲裝上“緊箍咒”,輕松精準控制范圍。
package main
import (
"fmt"
"github.com/gocolly/colly/v2"
)
func main() {
// 創(chuàng)建默認收集器,限制最大深度為 2
c := colly.NewCollector(
colly.MaxDepth(2), // 只爬取首頁 + 一層鏈接
)
// 每次發(fā)現(xiàn) <a href="..."> 標簽就打印并繼續(xù)訪問
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
link := e.Attr("href")
fmt.Println("發(fā)現(xiàn)鏈接:", link)
// 自動補全絕對路徑后再訪問
absoluteURL := e.Request.AbsoluteURL(link)
e.Request.Visit(absoluteURL)
})
// 從編程獅首頁開始
c.Visit("http://eska-fuses.cn/")
}
運行結(jié)果(只爬取兩層):
發(fā)現(xiàn)鏈接: http://eska-fuses.cn/go
發(fā)現(xiàn)鏈接: http://eska-fuses.cn/python
...
關(guān)鍵點 | 說明 | 示例代碼 |
---|---|---|
設(shè)置深度 | 通過 colly.MaxDepth(n) 設(shè)置最大爬取深度 |
colly.MaxDepth(2) |
深度含義 | 0 表示只爬首頁,1 表示爬首頁 + 一層鏈接,依此類推 | colly.MaxDepth(0) 只爬首頁 |
動態(tài)調(diào)整 | 可以在運行時動態(tài)調(diào)整深度 | c.MaxDepth = 3 |
假設(shè)你想爬取編程獅首頁及其兩層鏈接,完整代碼如下:
package main
import (
"fmt"
"github.com/gocolly/colly/v2"
)
func main() {
// 創(chuàng)建默認收集器,限制最大深度為 2
c := colly.NewCollector(
colly.MaxDepth(2), // 只爬取首頁 + 一層鏈接
)
// 每次發(fā)現(xiàn) <a href="..."> 標簽就打印并繼續(xù)訪問
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
link := e.Attr("href")
fmt.Println("發(fā)現(xiàn)鏈接:", link)
// 自動補全絕對路徑后再訪問
absoluteURL := e.Request.AbsoluteURL(link)
e.Request.Visit(absoluteURL)
})
// 從編程獅首頁開始
c.Visit("http://eska-fuses.cn/")
}
現(xiàn)象 | 原因 | 解決方法 |
---|---|---|
爬取深度不夠 | MaxDepth 設(shè)置太小 |
增大 MaxDepth 值 |
爬取深度太深 | MaxDepth 設(shè)置太大 |
減小 MaxDepth 值 |
無法訪問某些鏈接 | 鏈接不在 AllowedDomains 中 |
檢查 AllowedDomains 是否包含目標域名 |
main.go
。
標題:Colly 爬取深度限制:精準控制爬蟲范圍(小白適配版)| 編程獅教程
描述:
關(guān)鍵詞:Colly 爬取深度、MaxDepth、爬蟲范圍控制、編程獅
更多建議: