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 分钟动手实验
- 打开 终端 → 新建
filter.go
。 - 复制上方代码 → 运行。
- 观察终端:只出现课程链接,其他路径被过滤!
以上内容是否对您有帮助:
更多建议: