Colly是一个高度可定制的抓取框架。它有合理的默认值,并提供了大量更改它们的选项。

采集器配置

采集器属性的完整列表可以在这里找到。初始化采集器的推荐方法是使用colly.NewCollector(options…)

使用默认设置创建收集器:

  1. c1 := colly.NewCollector()

创建另一个采集器并更改User-Agent和url重访选项:

  1. c2 := colly.NewCollector(
  2. colly.UserAgent("xy"),
  3. colly.AllowURLRevisit(),
  4. )

或者

  1. c2 := colly.NewCollector()
  2. c2.UserAgent = "xy"
  3. c2.AllowURLRevisit = true

通过覆盖采集器的属性,可以在抓取作业的任何位置更改配置。

一个很好的例子是用户代理切换器,它改变每个请求的用户代理:

  1. const letterBytes = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  2. func RandomString() string {
  3. b := make([]byte, rand.Intn(10)+10)
  4. for i := range b {
  5. b[i] = letterBytes[rand.Intn(len(letterBytes))]
  6. }
  7. return string(b)
  8. }
  9. c := colly.NewCollector()
  10. c.OnRequest(func(r *colly.Request) {
  11. r.Headers.Set("User-Agent", RandomString())
  12. })

通过环境变量进行配置

采集器的默认配置可以通过环境变量更改。这允许我们在不重新编译的情况下对收集器进行微调。环境解析是采集器初始化的最后一步,因此初始化之后的每个配置更改都会覆盖从环境解析的配置。

环境变量配置

  • COLLY_ALLOWED_DOMAINS (用逗号分隔的域名列表)
  • COLLY_CACHE_DIR (string)
  • COLLY_DETECT_CHARSET (y/n)
  • COLLY_DISABLE_COOKIES (y/n)
  • COLLY_DISALLOWED_DOMAINS (用逗号分隔的域名列表)
  • COLLY_IGNORE_ROBOTSTXT (y/n)
  • COLLY_FOLLOW_REDIRECTS (y/n)
  • COLLY_MAX_BODY_SIZE (int)
  • COLLY_MAX_DEPTH (int - 0 means infinite)
  • COLLY_PARSE_HTTP_ERROR_RESPONSE (y/n)
  • COLLY_USER_AGENT (string)

HTTP 配置

Colly使用Golang的默认http客户端作为网络层。HTTP选项可以通过更改默认的HTTP往返器进行调整。

  1. c := colly.NewCollector()
  2. c.WithTransport(&http.Transport{
  3. Proxy: http.ProxyFromEnvironment,
  4. DialContext: (&net.Dialer{
  5. Timeout: 30 * time.Second,
  6. KeepAlive: 30 * time.Second,
  7. DualStack: true,
  8. }).DialContext,
  9. MaxIdleConns: 100,
  10. IdleConnTimeout: 90 * time.Second,
  11. TLSHandshakeTimeout: 10 * time.Second,
  12. ExpectContinueTimeout: 1 * time.Second,
  13. }