colly 的默认配置针对是少量站点的优化配置。如果你是针对大量站点的抓取,还需要一些改进。
默认情况下,colly 中的 cookies 和 url 是保存在内存中,我们要换成可持久化的存储。前面介绍过,colly 已经实现一些常用的可持久化的存储组件。
colly 默认会阻塞等待请求执行完成,这将会导致等待执行任务数越来越大。我们可以通过设置 collector 的 Async 选项为 true 实现异步处理,从而避免这个问题。如果采用这种方式,记住增加 c.Wait(),否则程序会立刻退出。
colly 默认开启 KeepAlive 增加爬虫的抓取速度。但是,这对打开的文件描述符有要求,对于长时间运行的任务,进程非常容易就能达到最大描述符的限制。
禁止 HTTP 的 KeepAlive 的示例代码,如下。
c := colly.NewCollector() c.WithTransport(&http.Transport{ DisableKeepAlives: true, })