CAPSOLVER
博客
使用Colly进行Golang网络爬虫

使用Colly进行Go语言网络爬虫

Logo of CapSolver

Ethan Collins

Pattern Recognition Specialist

04-Dec-2025

网络爬虫 是一种从网站中提取数据的方法。在 Golang 中,由于其简单性和强大的功能,Colly 库是网络爬虫的流行工具。本指南将引导您设置一个 Golang 项目,使用 Colly 构建一个基本的爬虫,处理复杂的数据提取场景,并通过并发请求优化您的爬虫。

设置您的 Golang 项目

在开始之前,请确保您的系统上已安装 Go。使用以下命令初始化您的项目并获取 Colly 包:

bash 复制代码
go mod init my_scraper
go get -u github.com/gocolly/colly

这将设置您的项目目录并安装 Colly 包。

领取您的 CapSolver 奖励代码

立即提升您的自动化预算!
在充值 CapSolver 账户时使用奖励代码 CAPN,每次充值可获得额外 5% 奖励 —— 无限制。
现在在您的 CapSolver 仪表板 中领取

构建一个基本的爬虫

让我们创建一个基本的爬虫,从特定的维基百科页面中提取所有链接。

  1. 创建一个名为 main.go 的新文件,并添加以下代码:
go 复制代码
package main

import (
    "fmt"
    "github.com/gocolly/colly"
)

func main() {
    c := colly.NewCollector(
        colly.AllowedDomains("en.wikipedia.org"),
    )

    c.OnHTML(".mw-parser-output", func(e *colly.HTMLElement) {
        links := e.ChildAttrs("a", "href")
        fmt.Println(links)
    })

    c.Visit("https://en.wikipedia.org/wiki/Web_scraping")
}

此代码初始化一个限制为 en.wikipedia.org 的 Colly 收集器,然后设置一个回调函数,用于查找并打印页面中 .mw-parser-output div 内的所有链接。

爬取表格数据

对于更复杂的任务,例如爬取表格数据并将其写入 CSV 文件,可以使用 Go 中的 encoding/csv 包:

  1. main.go 中添加以下代码以爬取表格数据:
go 复制代码
package main

import (
    "encoding/csv"
    "log"
    "os"
    "github.com/gocolly/colly"
)

func main() {
    fName := "data.csv"
    file, err := os.Create(fName)
    if err != nil {
        log.Fatalf("Could not create file, err: %q", err)
        return
    }
    defer file.Close()

    writer := csv.NewWriter(file)
    defer writer.Flush()

    c := colly.NewCollector()

    c.OnHTML("table.wikitable", func(e *colly.HTMLElement) {
        e.ForEach("tr", func(_ int, row *colly.HTMLElement) {
            rowData := []string{}
            row.ForEach("td", func(_ int, cell *colly.HTMLElement) {
                rowData = append(rowData, cell.Text)
            })
            writer.Write(rowData)
        })
    })

    c.Visit("https://en.wikipedia.org/wiki/List_of_programming_languages")
}

此脚本从维基百科页面中爬取表格数据并写入 data.csv 文件。

并发请求

为了加快爬取速度,您可以使用 Go 的协程(goroutines)进行并发请求。以下是并发爬取多个页面的方法:

go 复制代码
package main

import (
    "fmt"
    "github.com/gocolly/colly"
    "sync"
)

func scrape(url string, wg *sync.WaitGroup) {
    defer wg.Done()
    
    c := colly.NewCollector()
    
    c.OnHTML("title", func(e *colly.HTMLElement) {
        fmt.Println("Title found:", e.Text)
    })
    
    c.Visit(url)
}

func main() {
    var wg sync.WaitGroup
    urls := []string{
        "https://en.wikipedia.org/wiki/Web_scraping",
        "https://en.wikipedia.org/wiki/Data_mining",
        "https://en.wikipedia.org/wiki/Screen_scraping",
    }

    for _, url := range urls {
        wg.Add(1)
        go scrape(url, &wg)
    }

    wg.Wait()
}

在此示例中,我们定义了一个 scrape 函数,该函数接受一个 URL 和一个等待组作为参数。该函数初始化一个 Colly 收集器,设置一个回调函数以打印页面标题,然后访问该 URL。main 函数创建一个等待组,遍历 URL 列表,并为每个 URL 启动一个协程以并发爬取。

通过遵循这些步骤,您可以使用 Colly 构建强大的网络爬虫,处理各种爬取场景,并通过并发请求优化性能。如需更详细的教程和高级用法,请查看关于使用 Go 和 Colly 进行网络爬虫的资源。

其他 Go 语言网络爬虫库

除了 Colly 之外,还有几个其他优秀的 Go 语言网络爬虫库:

  • GoQuery:该库提供类似于 jQuery 的语法和功能集,使您能够轻松地进行网络爬虫操作,就像在 jQuery 中一样。
  • Ferret:一个便携、可扩展且快速的网络爬虫系统,旨在简化从网络中提取数据。Ferret 通过一种独特的声明式语言专注于数据提取。
  • Selenium:以其无头浏览器功能而闻名,Selenium 非常适合爬取动态内容。虽然它没有官方的 Go 支持,但有一个可用的端口,允许在 Go 项目中使用。

结论

网络爬虫是高效从网站中提取数据的强大且必不可少的技能。使用 Golang 和 Colly 库,您可以构建能够处理各种数据提取场景的稳健爬虫,从收集简单的链接到提取复杂的表格数据,并通过并发请求优化性能。

在本指南中,您学习了如何:

  1. 使用 Colly 库设置 Golang 项目。
  2. 构建一个基本爬虫,从网页中提取链接。
  3. 处理更复杂的数据提取,例如爬取表格数据并将其写入 CSV 文件。
  4. 通过并发请求优化您的爬虫。

通过遵循这些步骤,您可以创建高效且有效的 Golang 网络爬虫,利用 Colly 的简洁性和强大功能。如需更高级的用法和详细教程,请探索关于使用 Go 和 Colly 进行网络爬虫的其他资源。

常见问题

1. Colly 是否适合学习网络爬虫的初学者?

是的。Colly 设计简单且适合初学者,同时提供了强大的功能,如 DOM 解析、请求处理、回调函数和并发。即使是新接触 Go 的开发者也可以仅用几行代码快速构建一个功能爬虫。


2. Colly 能否爬取结构化内容,如表格或列表?

当然可以。Colly 允许选择特定的 HTML 节点和属性,这使得提取表格、列表、链接和其他结构化元素变得简单。您还可以使用 Go 的标准库直接将结果存储到 CSV 或 JSON 文件中。


3. 如何加快您的 Colly 网络爬虫?

您可以使用 Go 的协程(goroutines)并行处理多个页面。通过同时启动爬虫并使用等待组进行同步,可以显著提升爬虫性能——特别是在处理大型数据集或多 URL 爬取任务时。

合规声明: 本博客提供的信息仅供参考。CapSolver 致力于遵守所有适用的法律和法规。严禁以非法、欺诈或滥用活动使用 CapSolver 网络,任何此类行为将受到调查。我们的验证码解决方案在确保 100% 合规的同时,帮助解决公共数据爬取过程中的验证码难题。我们鼓励负责任地使用我们的服务。如需更多信息,请访问我们的服务条款和隐私政策。

更多

使用 Selenium 和 Python 进行网页爬虫
使用Selenium和Python进行网络爬虫 | 解决网络爬虫中的验证码

在本文中,您将掌握使用Selenium和Python进行网络爬虫,并学习如何解决过程中遇到的Captcha,以实现高效的数据提取。

web scraping
Logo of CapSolver

Ethan Collins

04-Dec-2025

使用Colly进行Go语言网络爬虫
使用Colly进行Go语言网络爬虫

在本文中,我们将深入探讨使用Go语言和Colly库进行网络爬虫。指南首先帮助您设置Go语言项目并安装Colly库。然后我们逐步讲解如何创建一个基础爬虫,从维基百科页面中提取链接,展示Colly的易用性和强大功能。

web scraping
Logo of CapSolver

Ethan Collins

04-Dec-2025

什么是网络爬虫
什么是网络爬虫 | 常见应用场景和问题

了解网络爬虫:学习其优势,轻松应对挑战,并通过CapSolver提升您的业务。

web scraping
Logo of CapSolver

Anh Tuan

03-Dec-2025

什么是 Puppeteer
什么是Puppeteer以及如何在网页爬虫中使用 | 完整指南 2026

本完整指南将深入探讨Puppeteer是什么以及如何在网页爬取中有效使用它。

web scraping
Logo of CapSolver

Nikolai Smirnov

03-Dec-2025

如何制作一个AI代理网络爬虫(适合初学者的教程)
如何制作一个AI代理网络爬虫(适合初学者的教程)

通过这个适合初学者的教程,学习如何从零开始创建AI智能体网络爬虫。了解核心组件、代码示例以及如何绕过反机器人措施(如验证码)以确保可靠的数据采集。

web scraping
Logo of CapSolver

Lucas Mitchell

02-Dec-2025

如何在您的AI爬虫工作流程中集成验证码破解
如何在您的AI爬虫工作流程中集成验证码识别

掌握将CAPTCHA求解服务集成到您的AI爬虫工作流程中的方法。学习reCAPTCHA v3、Cloudflare和AWS WAF的最佳实践,以确保可靠的大规模数据收集

web scraping
Logo of CapSolver

Ethan Collins

28-Nov-2025