Colly URL 過濾器:精準(zhǔn)控制爬取路徑

2025-07-14 17:08 更新

只想爬指定路徑?用正則表達(dá)式給爬蟲戴上“緊箍咒”,多余鏈接統(tǒng)統(tǒng)跳過!

一、示例:

只爬編程獅課程頻道,其他路徑一律忽略:

package main


import (
    "fmt"
    "regexp"


    "github.com/gocolly/colly/v2"
)


func main() {
    // 1. 創(chuàng)建收集器,只匹配課程相關(guān) URL
    c := colly.NewCollector(
        colly.URLFilters(
            // 允許:首頁 或 /course 開頭
            regexp.MustCompile(`https://www\.w3cschool\.cn/?$`),
            regexp.MustCompile(`https://www\.w3cschool\.cn/course.*`),
        ),
    )


    // 2. 發(fā)現(xiàn)鏈接就打印并繼續(xù)訪問
    c.OnHTML("a[href]", func(e *colly.HTMLElement) {
        link := e.Attr("href")
        fmt.Printf("發(fā)現(xiàn)課程鏈接:%q → %s\n", e.Text, link)
        // 自動補全絕對路徑
        c.Visit(e.Request.AbsoluteURL(link))
    })


    // 3. 打印訪問日志
    c.OnRequest(func(r *colly.Request) {
        fmt.Println("正在訪問:", r.URL.String())
    })


    // 4. 從課程首頁開始
    c.Visit("http://m.o2fo.com/course")
}

二、3 步快速體驗

步驟 操作 說明
① 保存代碼 復(fù)制上方內(nèi)容 → 保存為 filter.go 依賴已是最新版
② 運行 go run filter.go 終端只打印課程相關(guān)鏈接
③ 改正則 把 /course 換成 /blog 立刻切換爬取范圍

三、實戰(zhàn)正則模板

需求 正則示例
只抓 .html 頁面 regexp.MustCompile(.*.html$)
排除 ?page= 翻頁 regexp.MustCompile(^(?!.\?page=).)
匹配數(shù)字 id regexp.MustCompile(/course/\d+)

四、常見坑 30 秒排查

癥狀 原因 解決
一個都不爬 正則寫錯 用 在線正則工具 先驗證
漏爬子目錄 末尾少 .* 加 .* 或 /.*
報錯 panic 正則語法錯誤 regexp.MustCompile 里用反引號 `` ```

五、1 分鐘動手實驗

  1. 打開 終端 → 新建 filter.go。
  2. 復(fù)制上方代碼 → 運行。
  3. 觀察終端:只出現(xiàn)課程鏈接,其他路徑被過濾!
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號