配置文件
Colly 是一个高度可定制的抓取框架。它具有最佳的默认值,并提供了大量的选项来定制。
1.Collector收集器配置
可以在这里找到收集器属性的完整列表。初始化收集器的推荐方法是使用 colly.NewCollector(options...)。
使用默认设置创建收集器:
go
c1 := colly.NewCollector()
创建另一个收集器并更改 User-Agent 和 url 重新访问选项:
go
c2 := colly.NewCollector(
colly.UserAgent("xy"),
colly.AllowURLRevisit(),
)
或者
go
c2 := colly.NewCollector()
c2.UserAgent = "xy"
c2.AllowURLRevisit = true
通过覆盖收集器的属性,可以在抓取作业的任何时刻更改配置。
一个很好的例子是用户代理切换器,它会根据每个请求更改用户代理:
go
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())
})
2.通过环境变量进行配置
Collector 的默认配置可以通过环境变量进行更改。这使我们能够微调收集器而无需重新编译。环境解析是收集器初始化的最后一步,因此初始化后的每个配置更改都会覆盖从环境解析的配置。
环境配置变量
- ALLOWED_DOMAINS (comma separated list of domains)
- CACHE_DIR (string)
- DETECT_CHARSET (y/n)
- DISABLE_COOKIES (y/n)
- DISALLOWED_DOMAINS (comma separated list of domains)
- IGNORE_ROBOTSTXT (y/n)
- MAX_BODY_SIZE (int)
- MAX_DEPTH (int - 0 means infinite)
- PARSE_HTTP_ERROR_RESPONSE (y/n)
- USER_AGENT (string)
2.HTTP 配置
Colly 使用 Golang 的默认 http 客户端作为网络层。可以通过更改默认 HTTP 往返程序来调整 HTTP 选项。
go
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,
}