Colly + Redis 持久化:断点续爬与分布式一步到位

2025-07-14 16:48 更新

进程挂了数据全丢?单机内存不够?用 Redis 当“硬盘”,已爬 URL、Cookie 永久保存,多台机器共享同一份进度!

一、示例:

编程狮课程频道,保留断点续爬能力:

package main


import (
    "log"


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


func main() {
    // 1. 你要爬的 URL 列表
    urls := []string{
        "https://www.w3cschool.cn/go",
        "https://www.w3cschool.cn/python",
        "https://www.w3cschool.cn/java",
    }


    // 2. Redis 连接信息(本地或云 Redis 均可)
    store := &redisstorage.Storage{
        Address:  "127.0.0.1:6379", // 换成你的 Redis 地址
        Password: "",               // 若有密码填这里
        DB:       0,                // 使用默认 0 号库
        Prefix:   "w3cschool_crawler", // key 前缀,避免冲突
    }


    // 3. 创建收集器并把“家”安到 Redis
    c := colly.NewCollector()
    if err := c.SetStorage(store); err != nil {
        log.Fatal("连接 Redis 失败:", err)
    }


    // 4. 清空上一次测试数据(正式上线可注释掉)
    _ = store.Clear()


    // 5. 创建队列:并发 3 线程 + Redis 持久化
    q, _ := queue.New(3, store)


    // 6. 打印 Cookie(验证登录态是否持久)
    c.OnResponse(func(r *colly.Response) {
        log.Println("Cookies:", c.Cookies(r.Request.URL.String()))
    })


    // 7. 把 URL 压进队列
    for _, u := range urls {
        _ = q.AddURL(u)
    }


    // 8. 启动队列,自动消费
    q.Run(c)
}

二、3 步快速跑通

步骤 命令/操作 说明
① 启动 Redis docker run -d -p 6379:6379 redis 本地或云服务器均可
② 安装依赖 go get github.com/gocolly/colly/v2/... 一键拉取新版
③ 运行 go run main.go 看到进度与 Cookie 实时写入 Redis

三、Redis 存储到底存了什么?

使用 redis-cli 查看:

127.0.0.1:6379> keys w3cschool_crawler*
1) "w3cschool_crawler:visited_urls"
2) "w3cschool_crawler:cookies_https:www.w3cschool.cn"

  • visited_urls 记录已爬链接,重启后自动跳过。
  • cookies_* 保存登录态,多台机器共享同一份 Cookie。

四、常见问题速查

问题 原因 解决
connection refused Redis 没启动或端口错 docker ps 检查 6379 是否监听
数据没保存 忘记 SetStorage 确保 c.SetStorage(store) 已写
想清空重来 一键清库 store.Clear() 或 FLUSHDB

五、1 分钟进阶:多台机器共享进度

  • Address 改成云 Redis(阿里云、腾讯云)。
  • 所有节点跑同一份代码,自动去重、共享 Cookie。
  • 扩容只需再开一台机器,零代码改动!
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号