Colly Go 爬虫库:完整教程与实战示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

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                    

推荐