Colly Go 爬虫库:完整网页抓取指南
1. 什么是 Colly?为什么需要它?
Colly 是一个强大且高性能的 Go 语言网页抓取(爬虫)库。它提供了简洁、异步且易于扩展的接口,用于从网站提取数据。Colly 基于 net/http 和 goquery(Go 版的 jQuery)构建,让开发者可以使用熟悉的 CSS 选择器语法来导航 HTML 文档。
为什么需要这个库?在当今世界,数据就是新石油。网页抓取可以自动化信息收集:监控竞争对手价格、收集新闻、分析 SEO 指标、创建商品数据库等等。Colly 凭借其速度(基于 goroutine 的异步架构)、内置缓存支持、自动延迟管理(以遵守网站政策)以及灵活的回调系统,在众多解决方案中脱颖而出。
该库既适合小型脚本,也适合大型分布式数据采集系统。得益于 Go 的强类型和无需运行时(与 Python/Node.js 不同),Colly 应用可以编译成单个二进制文件,简化了部署和扩展。
2. 安装
使用 Go 标准包管理器安装 Colly。请确保你已安装 Go 1.18 或更高版本。
go get -u github.com/gocolly/colly/v2
执行命令后,该库将被添加到你的 go.mod 文件中。还建议安装 goquery 用于处理 HTML(它会作为依赖自动下载):
go get -u github.com/PuerkitoBio/goquery
3. 快速入门:最小示例
创建一个简单的爬虫,输出 example.com 首页的标题(<h1> 标签)。
package main
import (
"fmt"
"github.com/gocolly/colly/v2"
)
func main() {
// 创建一个新的收集器
c := colly.NewCollector()
// 处理已访问页面的回调
c.OnHTML("h1", func(e *colly.HTMLElement) {
fmt.Println("标题:", e.Text)
})
// 错误处理回调
c.OnError(func(r *colly.Response, err error) {
fmt.Println("错误:", err)
})
// 开始抓取
c.Visit("https://example.com")
}
使用命令 go run main.go 运行代码。你将看到页面的标题。这是一个可以扩展的最小基础。
4. 主要方法和函数(至少 8 个)
下面介绍 Colly 中覆盖 90% 网页抓取任务的关键方法。
4.1 colly.NewCollector()
签名: func NewCollector(options ...func(*Collector)) *Collector
功能: 创建一个新的收集器实例——管理抓取过程的主要对象。接受可选的配置函数。
// 带配置的创建
c := colly.NewCollector(
colly.AllowedDomains("example.com"), // 只允许 example.com
colly.CacheDir("./cache"), // 缓存请求
)
4.2 Collector.Visit()
签名: func (c *Collector) Visit(URL string) error
功能: 向指定 URL 发起 HTTP GET 请求。这是抓取的入口点。
err := c.Visit("https://exa