W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Colly 默認把 Cookie 和已爬 URL 放在內存里,程序一關就全丟。本文教你 5 種“搬家”方案,讓數(shù)據(jù)永久保存、多臺機器共享。
內存存儲的痛點 | 換后端的好處 |
---|---|
進程退出 → 數(shù)據(jù)全丟 | 斷電重啟也能斷點續(xù)爬 |
單機內存有限 | 用數(shù)據(jù)庫/Redis 可橫向擴容 |
多臺節(jié)點無法共享 | 統(tǒng)一存儲 → 避免重復抓取 |
后端 | 特點 | 適用場景 |
---|---|---|
內存(默認) | 零依賴,速度最快 | 一次性腳本、調試 |
Redis | 內存數(shù)據(jù)庫,讀寫飛快 | 分布式爬蟲、隊列 |
BoltDB | 單文件嵌入式,無需安裝服務 | 本地小項目、單節(jié)點 |
SQLite3 | 單文件 SQL 數(shù)據(jù)庫 | 需要 SQL 查詢、報表 |
MongoDB / PostgreSQL | 完整文檔/關系型數(shù)據(jù)庫 | 企業(yè)級、海量數(shù)據(jù) |
## 先啟動 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. 創(chuàng)建收集器并把“家”搬到 Redis
c := colly.NewCollector()
c.SetStorage(store)
// 3. 正常寫業(yè)務邏輯
c.OnHTML("title", func(e *colly.HTMLElement) {
println("標題:", e.Text)
})
c.Visit("http://m.o2fo.com/")
}
效果
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("http://m.o2fo.com/")
}
特點
crawler.db
文件,拷走即可遷移。 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%';
只要實現(xiàn) colly/storage.Storage
接口的 4 個方法即可:
type Storage interface {
Init() error
Visited(requestID uint64) error
IsVisited(requestID uint64) (bool, error)
Cookies(u *url.URL) string
}
示例:把數(shù)據(jù)存到 MySQL、阿里云 OSS、甚至微信云托管,都能搞定!
需求 | 推薦后端 | 一句話理由 |
---|---|---|
本地腳本 | 內存 / BoltDB | 簡單、零依賴 |
分布式集群 | Redis | 快、天然共享 |
需要 SQL 報表 | SQLite3 / PostgreSQL | 直接跑 SQL |
海量數(shù)據(jù) | MongoDB | 文檔型易擴展 |
127.0.0.1:6379
換成 Redis 實驗地址 → 運行。 Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: