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

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 仪表板 中领取
。
构建一个基本的爬虫
让我们创建一个基本的爬虫,从特定的维基百科页面中提取所有链接。
- 创建一个名为
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 包:
- 在
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 库,您可以构建能够处理各种数据提取场景的稳健爬虫,从收集简单的链接到提取复杂的表格数据,并通过并发请求优化性能。
在本指南中,您学习了如何:
- 使用 Colly 库设置 Golang 项目。
- 构建一个基本爬虫,从网页中提取链接。
- 处理更复杂的数据提取,例如爬取表格数据并将其写入 CSV 文件。
- 通过并发请求优化您的爬虫。
通过遵循这些步骤,您可以创建高效且有效的 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进行网络爬虫,并学习如何解决过程中遇到的Captcha,以实现高效的数据提取。

Ethan Collins
04-Dec-2025

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

Ethan Collins
04-Dec-2025

什么是网络爬虫 | 常见应用场景和问题
了解网络爬虫:学习其优势,轻松应对挑战,并通过CapSolver提升您的业务。

Anh Tuan
03-Dec-2025

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

Nikolai Smirnov
03-Dec-2025

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

Lucas Mitchell
02-Dec-2025

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

Ethan Collins
28-Nov-2025


。