Colly 爬取深度限制:精准控制爬虫范围
2025-07-11 17:47 更新
爬虫任务太大怕失控?用 Colly 的
MaxDepth
限制爬取深度,就像给爬虫装上“紧箍咒”,轻松精准控制范围。
一、示例:
package main
import (
"fmt"
"github.com/gocolly/colly/v2"
)
func main() {
// 创建默认收集器,限制最大深度为 2
c := colly.NewCollector(
colly.MaxDepth(2), // 只爬取首页 + 一层链接
)
// 每次发现 <a href="..."> 标签就打印并继续访问
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
link := e.Attr("href")
fmt.Println("发现链接:", link)
// 自动补全绝对路径后再访问
absoluteURL := e.Request.AbsoluteURL(link)
e.Request.Visit(absoluteURL)
})
// 从编程狮首页开始
c.Visit("https://www.w3cschool.cn/")
}
运行结果(只爬取两层):
发现链接: https://www.w3cschool.cn/go
发现链接: https://www.w3cschool.cn/python
...
二、深度限制的 3 个关键点
关键点 | 说明 | 示例代码 |
---|---|---|
设置深度 | 通过 colly.MaxDepth(n) 设置最大爬取深度 |
colly.MaxDepth(2) |
深度含义 | 0 表示只爬首页,1 表示爬首页 + 一层链接,依此类推 | colly.MaxDepth(0) 只爬首页 |
动态调整 | 可以在运行时动态调整深度 | c.MaxDepth = 3 |
三、完整实战:爬取编程狮首页及两层链接
假设你想爬取编程狮首页及其两层链接,完整代码如下:
package main
import (
"fmt"
"github.com/gocolly/colly/v2"
)
func main() {
// 创建默认收集器,限制最大深度为 2
c := colly.NewCollector(
colly.MaxDepth(2), // 只爬取首页 + 一层链接
)
// 每次发现 <a href="..."> 标签就打印并继续访问
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
link := e.Attr("href")
fmt.Println("发现链接:", link)
// 自动补全绝对路径后再访问
absoluteURL := e.Request.AbsoluteURL(link)
e.Request.Visit(absoluteURL)
})
// 从编程狮首页开始
c.Visit("https://www.w3cschool.cn/")
}
四、常见问题速查
现象 | 原因 | 解决方法 |
---|---|---|
爬取深度不够 | MaxDepth 设置太小 |
增大 MaxDepth 值 |
爬取深度太深 | MaxDepth 设置太大 |
减小 MaxDepth 值 |
无法访问某些链接 | 链接不在 AllowedDomains 中 |
检查 AllowedDomains 是否包含目标域名 |
五、1 分钟实验
- 打开 Go 环境 → 新建
main.go
。 - 复制上方代码 → 运行。
- 观察终端:只爬取两层链接,不会无限深入。
标题:Colly 爬取深度限制:精准控制爬虫范围(小白适配版)| 编程狮教程
描述:
关键词:Colly 爬取深度、MaxDepth、爬虫范围控制、编程狮
以上内容是否对您有帮助:
更多建议: