Colly 存储后端:给爬虫数据安个“家”

2025-07-11 17:45 更新

Colly 默认把 Cookie 和已爬 URL 放在内存里,程序一关就全丢。本文教你 5 种“搬家”方案,让数据永久保存、多台机器共享。

一、为什么需要换存储后端?

内存存储的痛点 换后端的好处
进程退出 → 数据全丢 断电重启也能断点续爬
单机内存有限 用数据库/Redis 可横向扩容
多台节点无法共享 统一存储 → 避免重复抓取

二、5 种官方支持的后端速览

后端 特点 适用场景
内存(默认) 零依赖,速度最快 一次性脚本、调试
Redis 内存数据库,读写飞快 分布式爬虫、队列
BoltDB 单文件嵌入式,无需安装服务 本地小项目、单节点
SQLite3 单文件 SQL 数据库 需要 SQL 查询、报表
MongoDB / PostgreSQL 完整文档/关系型数据库 企业级、海量数据

三、快速上手示例

1. Redis 后端(最常用)

## 先启动 Redis(本地或云服务器)
docker run -d -p 6379:6379 redis:alpine

package main


import (
    "github.com/gocolly/colly/v2"
    "github.com/gocolly/colly/v2/storage/redisstorage"
)


func main() {
    // 1. 连接 Redis
    store, _ := redisstorage.New(
        &redisstorage.Options{Address: "127.0.0.1:6379"},
    )


    // 2. 创建收集器并把“家”搬到 Redis
    c := colly.NewCollector()
    c.SetStorage(store)


    // 3. 正常写业务逻辑
    c.OnHTML("title", func(e *colly.HTMLElement) {
        println("标题:", e.Text)
    })


    c.Visit("https://www.w3cschool.cn/")
}

效果

  • 重启程序 → 自动跳过已爬 URL。
  • 开 10 台云主机 → 共享同一份 Redis,0 重复抓取。

2. BoltDB 后端(零依赖单文件)

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

package main


import (
    "github.com/gocolly/colly/v2"
    "github.com/gocolly/colly/v2/storage/boltdb"
)


func main() {
    store, _ := boltdb.New("crawler.db") // 自动生成一个文件
    c := colly.NewCollector()
    c.SetStorage(store)


    c.OnHTML("title", func(e *colly.HTMLElement) {
        println("标题:", e.Text)
    })


    c.Visit("https://www.w3cschool.cn/")
}

特点

  • 只生成一个 crawler.db 文件,拷走即可迁移。
  • 适合个人电脑或 U 盘携带。

3. SQLite3 后端(想用 SQL 查询)

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

store, _ := sqlite3.New("crawler.sqlite")
c := colly.NewCollector()
c.SetStorage(store)

进阶玩法
爬完后直接用 sqlite3 crawler.sqlite 命令行查询:

SELECT * FROM visited_urls WHERE url LIKE '%w3cschool%';

四、如何自己写存储后端?

只要实现 colly/storage.Storage 接口的 4 个方法即可:

type Storage interface {
    Init() error
    Visited(requestID uint64) error
    IsVisited(requestID uint64) (bool, error)
    Cookies(u *url.URL) string
}

示例:把数据存到 MySQL、阿里云 OSS、甚至微信云托管,都能搞定!

五、实战选型建议

需求 推荐后端 一句话理由
本地脚本 内存 / BoltDB 简单、零依赖
分布式集群 Redis 快、天然共享
需要 SQL 报表 SQLite3 / PostgreSQL 直接跑 SQL
海量数据 MongoDB 文档型易扩展

六、动手实验(1 分钟完成)

  1. 打开 终端 → 新建 Go 文件。
  2. 复制 “Redis 后端” 示例 → 把 127.0.0.1:6379 换成 Redis 实验地址 → 运行。
  3. 关掉终端 → 重新打开 → 再次运行 → 观察是否秒跳过已爬页面。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号