Colly 队列爬取:让爬虫任务排队执行

2025-07-14 15:25 更新

一键把 1000 个 URL 交给“小管家”排队,自动限速、并发可控,复制即可跑!

一、示例:

编程狮课程列表,并设置 3 个并发线程:

package main


import (
    "fmt"


    "github.com/gocolly/colly/v2"
    "github.com/gocolly/colly/v2/queue"
)


func main() {
    // 1. 创建收集器
    c := colly.NewCollector()


    // 2. 新建队列:3 个并发线程 + 内存存储 1 万条
    q, _ := queue.New(
        3, // 同时 3 个 goroutine 去请求
        &queue.InMemoryQueueStorage{MaxSize: 10000},
    )


    // 3. 打印每次访问的 URL
    c.OnRequest(func(r *colly.Request) {
        fmt.Println("正在访问:", r.URL)
    })


    // 4. 把 URL 压进队列(模拟 5 个课程页)
    for i := 1; i <= 5; i++ {
        q.AddURL(fmt.Sprintf("https://www.w3cschool.cn/course/%d", i))
    }


    // 5. 启动队列,自动消费所有 URL
    q.Run(c)
}

二、运行步骤(1 分钟搞定)

  1. 安装依赖
    go get github.com/gocolly/colly/v2/queue

  1. 保存文件
    把代码保存为 queue.go

  1. 一键运行
    go run queue.go

终端输出(并发 3 线程):

正在访问: https://www.w3cschool.cn/course/1
正在访问: https://www.w3cschool.cn/course/2
正在访问: https://www.w3cschool.cn/course/3
正在访问: https://www.w3cschool.cn/course/4
正在访问: https://www.w3cschool.cn/course/5

三、队列 3 大亮点

亮点 一句话解释 对应代码
并发可控 想多快就多快,不撑爆目标站 queue.New(3, ...)
自动去重 同一 URL 不会重复爬取 内置哈希去重
断点续爬 程序挂了重启继续 换持久化存储见下方

四、进阶:换持久化队列(断点续爬)

把内存换成 Redis,程序重启也能接着爬:

go get github.com/gocolly/colly/v2/storage/redisstorage

store, _ := redisstorage.New(&redisstorage.Options{Address: "127.0.0.1:6379"})
q, _ := queue.New(3, &queue.RedisQueueStorage{Client: store.Client})

五、常见问题速查

问题 原因 解决
队列卡住 目标站限速 调小并发数或加 Delay
内存暴涨 队列太大 减小 MaxSize 或换 Redis
URL 重复 忘记过滤 先 AddURL 前做去重

六、1 分钟动手实验

  1. 打开 终端 → 新建 queue.go
  2. 复制上方代码 → 把 URL 换成你想爬的列表 → 运行。
  3. 观察终端:3 线程并发,任务自动完成。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号