Colly 配置:打造专属爬虫机器人

2025-06-25 18:47 更新

在上一篇 Colly 入门中,我们已经成功创建并运行了第一个 Colly 爬虫。现在,让我们进一步学习如何通过配置 Colly,让我们的爬虫机器人更加智能、高效,就好像给汽车换轮胎、升级引擎一样,让它的性能更上一层楼。编程狮(W3Cschool.cn)将继续为你提供简单易懂的讲解,让你轻松掌握 Colly 的配置技巧。

一、创建收集器:给爬虫机器人装上 “大脑”

在 Colly 中,收集器(Collector)就像是爬虫机器人的大脑,负责管理网络通信和执行各种任务。创建收集器的方法非常简单,只需要一行代码:

c := colly.NewCollector()

这行代码就像是给爬虫机器人安装了一个最基础的大脑,让它具备了基本的爬取能力。

二、个性化配置:给爬虫机器人 “换装”

为了适应不同的爬取任务,我们可以对收集器进行个性化配置,这就像是给爬虫机器人换上不同的装备,让它在不同的环境中都能出色完成任务。

(一)修改用户代理(User-Agent)

不同的网站对访问者的身份有不同的要求。有时候,我们需要让爬虫机器人伪装成不同的浏览器,这就需要修改用户代理(User-Agent)。代码示例:

c := colly.NewCollector(
    colly.UserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"),
)

这样设置后,目标网站就会认为是常见的浏览器在访问,而不是一个简单的爬虫程序。

(二)允许重复访问网址

在某些情况下,我们可能需要让爬虫机器人多次访问同一个网址,这就需要开启允许重复访问网址的选项。代码示例:

c := colly.NewCollector(
    colly.AllowURLRevisit(),
)

或者,也可以在创建收集器后,直接修改其属性:

c := colly.NewCollector()
c.AllowURLRevisit = true

(三)动态切换用户代理

为了更好地模拟真实的浏览器访问行为,我们还可以让爬虫机器人在每次请求时随机切换用户代理。这就像是给爬虫机器人准备了一套变装道具,让它每次访问都换一个身份。代码示例:

const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"


func RandomString() string {
    b := make([]byte, rand.Intn(10)+10)
    for i := range b {
        b[i] = letterBytes[rand.Intn(len(letterBytes))]
    }
    return string(b)
}


c := colly.NewCollector()


c.OnRequest(func(r *colly.Request) {
    r.Headers.Set("User-Agent", RandomString())
})

三、通过环境变量配置:让爬虫机器人更灵活

除了在代码中直接配置收集器,我们还可以通过环境变量来配置,这就像是给爬虫机器人准备了一套外部指令,让它在不同的环境中都能灵活调整自己的行为。

(一)设置允许访问的域名

如果我们只想让爬虫机器人访问特定的域名,可以通过设置环境变量 COLLY_ALLOWED_DOMAINS 来实现。例如,在终端中运行以下命令:

export COLLY_ALLOWED_DOMAINS="w3cschool.cn,www.w3cschool.cn"

然后运行爬虫程序,它就只会访问编程狮(W3Cschool.cn)网站及其子域名。

(二)禁止访问的域名

如果我们想禁止爬虫机器人访问某些域名,可以通过设置环境变量 COLLY_DISALLOWED_DOMAINS 来实现。例如:

export COLLY_DISALLOWED_DOMAINS="badwebsite.com,www.badwebsite.com"

这样,爬虫机器人就不会访问这些被禁止的域名。

(三)其他环境变量配置

Colly 提供了许多其他的环境变量配置选项,例如:

  • COLLY_CACHE_DIR:设置缓存目录
  • COLLY_DETECT_CHARSET:是否检测字符集(y 表示是,n 表示否)
  • COLLY_DISABLE_COOKIES:是否禁用 cookies(y 表示是,n 表示否)
  • COLLY_FOLLOW_REDIRECTS:是否跟随重定向(y 表示是,n 表示否)
  • COLLY_MAX_BODY_SIZE:设置最大响应体大小
  • COLLY_MAX_DEPTH:设置最大爬取深度(0 表示无限深度)
  • COLLY_USER_AGENT:设置默认的用户代理

这些环境变量就像是给爬虫机器人准备的各种开关和旋钮,通过调整它们,可以让爬虫机器人在不同的环境中都能表现出色。

四、HTTP 配置:优化爬虫机器人的网络连接

为了提升爬虫机器人的性能,我们还可以对 HTTP 连接进行优化,这就像是给汽车升级引擎,让它跑得更快更稳。

(一)设置 HTTP 超时时间

在网络爬取过程中,可能会遇到网络不稳定的情况。为了防止爬虫机器人陷入无尽的等待,我们可以设置 HTTP 请求的超时时间。代码示例:

c := colly.NewCollector()


c.WithTransport(&http.Transport{
    DialContext: (&net.Dialer{
        Timeout:   30 * time.Second,  // 设置连接超时时间为 30 秒
        KeepAlive: 30 * time.Second,  // 设置连接保持活动时间为 30 秒
    }).DialContext,
    TLSHandshakeTimeout: 10 * time.Second,  // 设置 TLS 握手超时时间为 10 秒
})

(二)设置代理服务器

在某些情况下,我们可能需要通过代理服务器来访问目标网站,这就像是给爬虫机器人找了一个中间人,让它通过中间人去访问目标网站。代码示例:

c := colly.NewCollector()


c.WithTransport(&http.Transport{
    Proxy: http.ProxyFromEnvironment,  // 使用环境变量中的代理服务器设置
})

五、进阶技巧:给爬虫机器人 “升级武器”

除了上述基本配置,我们还可以通过一些进阶技巧,让爬虫机器人更加智能、高效。

(一)使用中间件

Colly 支持使用中间件来扩展其功能,这就像是给爬虫机器人安装插件,让它具备更多的能力。例如,我们可以使用中间件来记录每次请求的详细信息:

c := colly.NewCollector()


c.Use(func(r *colly.Request) {
    fmt.Println("Requesting", r.URL)
})


c.Use(func(r *colly.Response) {
    fmt.Println("Visited", r.Request.URL)
})

(二)处理 JavaScript 渲染的页面

对于一些需要 JavaScript 渲染的页面,我们可以通过集成 Splash 等工具来处理,这就像是给爬虫机器人配备了一个能处理复杂网页的智能引擎。代码示例:

c := colly.NewCollector()


c.OnHTML("a.js-rendered", func(e *colly.HTMLElement) {
    fmt.Println("Found JavaScript rendered link:", e.Text)
})

六、总结与实践:让爬虫机器人大展身手

通过本篇文章,我们学习了如何通过个性化配置、环境变量设置以及 HTTP 优化等方式,让 Colly 爬虫机器人更加智能、高效。现在,你可以尝试结合这些配置技巧,去编程狮(W3Cschool.cn)网站上抓取更多有趣的数据,比如热门编程教程的标题和链接,或者最新技术文章的作者和发布日期。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号