国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Colly 存儲(chǔ)后端:給爬蟲(chóng)數(shù)據(jù)安個(gè)“家”

2025-07-11 17:45 更新

Colly 默認(rèn)把 Cookie 和已爬 URL 放在內(nèi)存里,程序一關(guān)就全丟。本文教你 5 種“搬家”方案,讓數(shù)據(jù)永久保存、多臺(tái)機(jī)器共享。

一、為什么需要換存儲(chǔ)后端?

內(nèi)存存儲(chǔ)的痛點(diǎn) 換后端的好處
進(jìn)程退出 → 數(shù)據(jù)全丟 斷電重啟也能斷點(diǎn)續(xù)爬
單機(jī)內(nèi)存有限 用數(shù)據(jù)庫(kù)/Redis 可橫向擴(kuò)容
多臺(tái)節(jié)點(diǎn)無(wú)法共享 統(tǒng)一存儲(chǔ) → 避免重復(fù)抓取

二、5 種官方支持的后端速覽

后端 特點(diǎn) 適用場(chǎng)景
內(nèi)存(默認(rèn)) 零依賴,速度最快 一次性腳本、調(diào)試
Redis 內(nèi)存數(shù)據(jù)庫(kù),讀寫(xiě)飛快 分布式爬蟲(chóng)、隊(duì)列
BoltDB 單文件嵌入式,無(wú)需安裝服務(wù) 本地小項(xiàng)目、單節(jié)點(diǎn)
SQLite3 單文件 SQL 數(shù)據(jù)庫(kù) 需要 SQL 查詢、報(bào)表
MongoDB / PostgreSQL 完整文檔/關(guān)系型數(shù)據(jù)庫(kù) 企業(yè)級(jí)、海量數(shù)據(jù)

三、快速上手示例

1. Redis 后端(最常用)

## 先啟動(dòng) Redis(本地或云服務(wù)器)
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. 創(chuàng)建收集器并把“家”搬到 Redis
    c := colly.NewCollector()
    c.SetStorage(store)


    // 3. 正常寫(xiě)業(yè)務(wù)邏輯
    c.OnHTML("title", func(e *colly.HTMLElement) {
        println("標(biāo)題:", e.Text)
    })


    c.Visit("http://eska-fuses.cn/")
}

效果

  • 重啟程序 → 自動(dòng)跳過(guò)已爬 URL。
  • 開(kāi) 10 臺(tái)云主機(jī) → 共享同一份 Redis,0 重復(fù)抓取。

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") // 自動(dòng)生成一個(gè)文件
    c := colly.NewCollector()
    c.SetStorage(store)


    c.OnHTML("title", func(e *colly.HTMLElement) {
        println("標(biāo)題:", e.Text)
    })


    c.Visit("http://eska-fuses.cn/")
}

特點(diǎn)

  • 只生成一個(gè) crawler.db 文件,拷走即可遷移。
  • 適合個(gè)人電腦或 U 盤(pán)攜帶。

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

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

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

進(jìn)階玩法
爬完后直接用 sqlite3 crawler.sqlite 命令行查詢:

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

四、如何自己寫(xiě)存儲(chǔ)后端?

只要實(shí)現(xiàn) colly/storage.Storage 接口的 4 個(gè)方法即可:

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

示例:把數(shù)據(jù)存到 MySQL、阿里云 OSS、甚至微信云托管,都能搞定!

五、實(shí)戰(zhàn)選型建議

需求 推薦后端 一句話理由
本地腳本 內(nèi)存 / BoltDB 簡(jiǎn)單、零依賴
分布式集群 Redis 快、天然共享
需要 SQL 報(bào)表 SQLite3 / PostgreSQL 直接跑 SQL
海量數(shù)據(jù) MongoDB 文檔型易擴(kuò)展

六、動(dòng)手實(shí)驗(yàn)(1 分鐘完成)

  1. 打開(kāi) 終端 → 新建 Go 文件。
  2. 復(fù)制 “Redis 后端” 示例 → 把 127.0.0.1:6379 換成 Redis 實(shí)驗(yàn)地址 → 運(yùn)行。
  3. 關(guān)掉終端 → 重新打開(kāi) → 再次運(yùn)行 → 觀察是否秒跳過(guò)已爬頁(yè)面。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)