Colly的默认配置经过优化,可以在一个作业中抓取数量较少的站点。如果你想要抓取数以百万计的站点,这个设置并不是最好的。以下是一些调整:

使用持久存储后端

默认情况下,Colly将cookie和访问过的url存储在内存中。您可以使用任何自定义后端替换内置内存存储后端。点击这里查看更多细节。

对递归调用的长时间运行的作业使用异步

默认情况下,Colly在请求未完成时阻塞,因此递归调用Collector。回调的访问产生不断增长的堆栈。Collector.Async = true这可以避免。(不要忘记使用c.Wait()与async。)

禁用或限制连接保持活动

Colly使用HTTP keep-alive来提高抓取速度。它需要打开文件描述符,所以max-fd可以很容易地达到长时间运行的作业的极限。

HTTP Keep-alive可以用以下代码禁用:

  1. c := colly.NewCollector()
  2. c.WithTransport(&http.Transport{
  3. DisableKeepAlives: true,
  4. })