使用多个收集器

如果任务足够复杂或具有不同类型的子任务,建议为一个抓取工作使用多个收集器。coursera course scraper就是一个很好的例子,它使用了两个收集器——一个解析列表视图并处理分页,另一个收集课程的详细信息。

注意:使用收集器。ID在调试中区分不同的收集器

克隆收集器

如果收集器具有类似的配置,可以使用收集器的Clone()方法。Clone()复制具有相同配置但没有附加回调的收集器。

c := colly.NewCollector(
	colly.UserAgent("myUserAgent"),
	colly.AllowedDomains("foo.com", "bar.com"),
)
// Custom User-Agent and allowed domains are cloned to c2
c2 := c.Clone()

  

在收集器之间传递自定义数据

使用collector的Request()函数可以与其他收集器共享上下文。

共享上下文的例子:

c.OnResponse(func(r *colly.Response) {
	r.Ctx.Put(r.Headers.Get("Custom-Header"))
	c2.Request("GET", "https://foo.com/", nil, r.Ctx, nil)
})

  

01-23 17:11