练习:用 Go 写一个并发网页爬虫

go基础 › 练习 03 · 并发爬虫 (第 3 章)
文章工具

Go 的招牌是并发,用爬虫把 goroutine 与 channel 真正用起来。

本练习要实现的模块(示意图)
图:本练习要实现的模块(示意图)

项目目标

写一个能并发抓取页面、抽取标题与链接、并把结果写入文件的小爬虫。

要做的功能

核心功能(必做)

  • 用 net/http 抓取一个页面,取出标题与所有链接。
  • 维护「已访问集合」(map + 锁,或 sync.Map),避免重复爬取。
  • 用 goroutine + channel 并发抓取多个页面。
  • 限制最大并发数(信号量 / worker pool),别把目标站打爆。
  • 把结果(url + 标题)写入文件。

进阶功能(选做)

  • 加请求限速与失败重试
  • 做基本的 robots.txt 判断
  • 统计各域名页面数量

会练到的知识点

  • goroutine 与 channel
  • sync 包与并发安全
  • net/http
  • 字符串 / 正则解析
  • worker pool

验收标准

  • 能并发抓取并输出结果
  • 同一页面不会重复抓
  • 并发数受控、能优雅退出

难度与工期

难度:★★★ · 建议工期:5–7 天 · 适合:学完语法、想练并发

参考实现(GitHub)

先自己动手实现,卡住了再对照参考;也可以只看它的目录结构,别直接照抄。

gocolly/colly —— 用 Go 写的爬虫框架,看它如何组织并发与回调。

加分项

  • 结果存成 JSON 或数据库
  • 加一个简单的命令行界面
  • 抓取并本地生成 sitemap

建议做法:先把「核心功能」列成本地待办,每完成一项就跑一次;做完再回头看参考实现,对比自己的设计差在哪。

⚠️ 版权声明

本文为免费文章,欢迎转载。转载请注明出处:一木科技(https://www.pingquan.vip/2026/10/14/practice-go-crawler/),并保留原文链接。