配置
Colly是一个高度可定制的抓取框架。它有合理的默认值,并提供了大量的选项来更改它们。
收集器的配置
收集器属性的完整列表可以在这里找到。初始化收集器的推荐方法是使用 colly.NewCollector(options...)。
创建一个具有默认设置的收集器:
c1 := colly.NewCollector()
创建另一个收集器,并更改用户代理和url重新操作:
c2 := colly.NewCollector( colly.UserAgent("xy"), colly.AllowURLRevisit(), )
或者
c2 := colly.NewCollector() c2.UserAgent = "xy" c2.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()) })
通过环境变量进行配置
收集器的默认配置可以通过环境变量更改。这允许我们在不重新编译的情况下微调收集器。环境解析是收集器初始化的最后一步,因此初始化之后的每个配置更改都会覆盖从环境中解析的配置。
环境变量配置
ALLOWED_DOMAINS
(用逗号分隔的域列表)CACHE_DIR
(string)DETECT_CHARSET
(y/n)DISABLE_COOKIES
(y/n)DISALLOWED_DOMAINS
(用逗号分隔的域列表)IGNORE_ROBOTSTXT
(y/n)MAX_BODY_SIZE
(int)MAX_DEPTH
(int - 0表示无穷大)PARSE_HTTP_ERROR_RESPONSE
(y/n)USER_AGENT
(string)
HTTP配置
Colly使用Golang的默认http客户端作为网络层。可以通过更改默认的HTTP往返器调整HTTP选项。
c := colly.NewCollector() c.WithTransport(&http.Transport{ Proxy: http.ProxyFromEnvironment, DialContext: (&net.Dialer{ Timeout: 30 * time.Second, KeepAlive: 30 * time.Second, DualStack: true, }).DialContext, MaxIdleConns: 100, IdleConnTimeout: 90 * time.Second, TLSHandshakeTimeout: 10 * time.Second, ExpectContinueTimeout: 1 * time.Second, }