W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
進(jìn)程掛了數(shù)據(jù)全丟?單機(jī)內(nèi)存不夠?用 Redis 當(dāng)“硬盤”,已爬 URL、Cookie 永久保存,多臺(tái)機(jī)器共享同一份進(jìn)度!
爬 編程獅課程頻道,保留斷點(diǎn)續(xù)爬能力:
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{
"http://m.o2fo.com/go",
"http://m.o2fo.com/python",
"http://m.o2fo.com/java",
}
// 2. Redis 連接信息(本地或云 Redis 均可)
store := &redisstorage.Storage{
Address: "127.0.0.1:6379", // 換成你的 Redis 地址
Password: "", // 若有密碼填這里
DB: 0, // 使用默認(rèn) 0 號(hào)庫
Prefix: "w3cschool_crawler", // key 前綴,避免沖突
}
// 3. 創(chuàng)建收集器并把“家”安到 Redis
c := colly.NewCollector()
if err := c.SetStorage(store); err != nil {
log.Fatal("連接 Redis 失?。?, err)
}
// 4. 清空上一次測(cè)試數(shù)據(jù)(正式上線可注釋掉)
_ = store.Clear()
// 5. 創(chuàng)建隊(duì)列:并發(fā) 3 線程 + Redis 持久化
q, _ := queue.New(3, store)
// 6. 打印 Cookie(驗(yàn)證登錄態(tài)是否持久)
c.OnResponse(func(r *colly.Response) {
log.Println("Cookies:", c.Cookies(r.Request.URL.String()))
})
// 7. 把 URL 壓進(jìn)隊(duì)列
for _, u := range urls {
_ = q.AddURL(u)
}
// 8. 啟動(dòng)隊(duì)列,自動(dòng)消費(fèi)
q.Run(c)
}
步驟 | 命令/操作 | 說明 |
---|---|---|
① 啟動(dòng) Redis | docker run -d -p 6379:6379 redis |
本地或云服務(wù)器均可 |
② 安裝依賴 | go get github.com/gocolly/colly/v2/... |
一鍵拉取新版 |
③ 運(yùn)行 | go run main.go |
看到進(jìn)度與 Cookie 實(shí)時(shí)寫入 Redis |
使用 redis-cli
查看:
127.0.0.1:6379> keys w3cschool_crawler*
1) "w3cschool_crawler:visited_urls"
2) "w3cschool_crawler:cookies_https:m.o2fo.com"
visited_urls
記錄已爬鏈接,重啟后自動(dòng)跳過。 cookies_*
保存登錄態(tài),多臺(tái)機(jī)器共享同一份 Cookie。問題 | 原因 | 解決 |
---|---|---|
connection refused |
Redis 沒啟動(dòng)或端口錯(cuò) | docker ps 檢查 6379 是否監(jiān)聽 |
數(shù)據(jù)沒保存 | 忘記 SetStorage |
確保 c.SetStorage(store) 已寫 |
想清空重來 | 一鍵清庫 | store.Clear() 或 FLUSHDB |
Address
改成云 Redis(阿里云、騰訊云)。 Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: