Colly官方文档入门教程

Colly

Colly 是用于构建 Web 爬虫的 Golang 框架。使用 Colly , 你可以构建各种复杂的 Web 抓取工具,从简单的抓取工具到处理数百万个网页的复杂的异步网站抓取工具。 Colly 提供了一个 API, 用于执行网络请求和处理接收到的内容(例如,与 HTML 文档的 DOM 树进行交互)。

特点

  1. 易于使用:Colly提供了简洁的API来发起HTTP请求,并且可以方便地处理响应。
  2. 灵活的中间件支持:允许用户自定义中间件来修改请求或响应,例如添加User-Agent、设置超时时间等。
  3. 自动处理重定向:Colly会自动跟踪重定向链接,这在爬取过程中非常有用。
  4. 强大的HTML解析功能:内置了对HTML文档的解析功能,可以通过XPath或CSS选择器来提取页面上的信息。
  5. 并发支持:Colly支持并发请求,可以设置最大并发数以控制爬虫的速度,避免给目标网站带来过大压力。
  6. 错误处理:提供了错误处理机制,可以帮助开发者更好地管理爬虫运行过程中可能出现的问题。

框架主要组件

  1. Collector
  2. Request 和 Response
  3. Middleware
  4. OnXXX 事件处理器
  5. 存储和缓存
  6. 并发控制

详细说明

  • Collector
  • 定义: Collector 是 Colly 的核心组件,负责管理和调度所有的请求和响应。
  • 初始化: 通过 colly.NewCollector() 创建一个新的 Collector 实例。
  • 属性: 包括请求队列、中间件列表、事件处理器等。
  • 方法: 提供了多种方法来配置和控制爬虫行为,如 Visit, OnHTML, OnRequest, OnError 等。
  1. Request 和 Response
  • Request: 表示一个 HTTP 请求,包含 URL、方法、头部信息等。
  • Response: 表示一个 HTTP 响应,包含状态码、响应体、头部信息等。
  • 交互: Collector 使用 Request 发起请求,并接收 Response 进行处理。
  1. Middleware
  • 定义: 中间件用于在请求和响应之间进行额外的处理。
  • 类型: 包括请求中间件 (BeforeRequest, AfterRequest) 和响应中间件 (BeforeResponse, AfterResponse)。
  • 注册: 可以通过 Collector 的 Use 方法注册中间件。
  • 示例:
go 复制代码
c.Use(func(r *colly.Request) {
    r.Headers.Set("User-Agent", "Mozilla/5.0")
})
  1. OnXXX 事件处理器
  • OnRequest: 在请求发送前触发。
  • OnResponse: 在接收到响应后触发。
  • OnHTML: 在解析 HTML 时触发。
  • OnError: 在发生错误时触发。
  • 示例:
go 复制代码
  c.OnRequest(func(r *colly.Request) {
      fmt.Println("Visiting", r.URL)
  })

  c.OnHTML("a[href]", func(e *colly.HTMLElement) {
      fmt.Println("Link found:", e.Attr("href"))
  })
  1. 存储和缓存
  • 存储: 支持将爬取的数据保存到文件、数据库等。
  • 缓存: 可以使用内存缓存或外部缓存系统(如 Redis)来减少重复请求。
  • 示例:
go 复制代码
  c.Storage = &colly.CacheStorage{
      CacheDir: "./cache",
  }
  1. 并发控制
  • 并发: 支持并发请求,提高爬虫效率。
  • 限流: 可以设置最大并发数,避免给服务器造成过大压力。
  • 示例:
go 复制代码
  c.Limit(&colly.LimitRule{
      DomainGlob:  "*",
      Parallelism: 10,
  })

安装

通过go get命令安装Colly:

bash 复制代码
go get -u github.com/gocolly/colly/v2

基本用法示例

go 复制代码
import (
    "github.com/gocolly/colly/v2"
)

func main() {
    // 初始化Collector
    c := colly.NewCollector()

    // 访问每个页面时执行
    c.OnHTML("some selector", func(e *colly.HTMLElement) {
        fmt.Println("Link found:", e.Text)
    })

    // 在访问每个页面之前执行
    c.OnRequest(func(r *colly.Request) {
        fmt.Println("Visiting", r.URL.String())
    })

    // 开始访问
    c.Visit("http://www.example.com")
}

总结

Colly 的设计非常模块化,通过 Collector 组件管理请求和响应,通过中间件和事件处理器进行灵活的定制。这种设计使得 Colly 成为一个高效且易于扩展的网络爬虫框架

相关推荐
Kai HVZ4 小时前
python爬虫----爬取视频实战
爬虫·python·音视频
B站计算机毕业设计超人4 小时前
计算机毕业设计PySpark+Hadoop中国城市交通分析与预测 Python交通预测 Python交通可视化 客流量预测 交通大数据 机器学习 深度学习
大数据·人工智能·爬虫·python·机器学习·课程设计·数据可视化
小白学大数据6 小时前
高级技术文章:使用 Kotlin 和 Unirest 构建高效的 Facebook 图像爬虫
爬虫·数据分析·kotlin
桃园码工21 小时前
1-Gin介绍与环境搭建 --[Gin 框架入门精讲与实战案例]
go·gin·环境搭建
数据小小爬虫21 小时前
利用Java爬虫获取苏宁易购商品详情
java·开发语言·爬虫
小木_.21 小时前
【Python 图片下载器】一款专门为爬虫制作的图片下载器,多线程下载,速度快,支持续传/图片缩放/图片压缩/图片转换
爬虫·python·学习·分享·批量下载·图片下载器
lovelin+v1750304096621 小时前
安全性升级:API接口在零信任架构下的安全防护策略
大数据·数据库·人工智能·爬虫·数据分析
云中谷21 小时前
Golang 神器!go-decorator 一行注释搞定装饰器,v0.22版本发布
go·敏捷开发
qq_375872691 天前
14爬虫:scrapy实现翻页爬取
爬虫·scrapy