Colly URL 过滤器:精准控制爬取路径

2025-07-14 17:08 更新

只想爬指定路径?用正则表达式给爬虫戴上“紧箍咒”,多余链接统统跳过!

一、示例:

只爬编程狮课程频道,其他路径一律忽略:

package main


import (
    "fmt"
    "regexp"


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


func main() {
    // 1. 创建收集器,只匹配课程相关 URL
    c := colly.NewCollector(
        colly.URLFilters(
            // 允许:首页 或 /course 开头
            regexp.MustCompile(`https://www\.w3cschool\.cn/?$`),
            regexp.MustCompile(`https://www\.w3cschool\.cn/course.*`),
        ),
    )


    // 2. 发现链接就打印并继续访问
    c.OnHTML("a[href]", func(e *colly.HTMLElement) {
        link := e.Attr("href")
        fmt.Printf("发现课程链接:%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("https://www.w3cschool.cn/course")
}

二、3 步快速体验

步骤 操作 说明
① 保存代码 复制上方内容 → 保存为 filter.go 依赖已是最新版
② 运行 go run filter.go 终端只打印课程相关链接
③ 改正则 把 /course 换成 /blog 立刻切换爬取范围

三、实战正则模板

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

四、常见坑 30 秒排查

症状 原因 解决
一个都不爬 正则写错 用 在线正则工具 先验证
漏爬子目录 末尾少 .* 加 .* 或 /.*
报错 panic 正则语法错误 regexp.MustCompile 里用反引号 `` ```

五、1 分钟动手实验

  1. 打开 终端 → 新建 filter.go
  2. 复制上方代码 → 运行。
  3. 观察终端:只出现课程链接,其他路径被过滤!
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号