colly一款快速优雅的golang爬虫框架,简单易用,功能完备。
colly 官网地址:http://go-colly.org/
colly github地址:github.com/gocolly/colly
colly 到目前为止有16500个赞
特性
- 干净的API
- 快速(单核>1k请求/秒)
- 管理每个域的请求延迟和最大并发性
- 自动cookie和会话处理
- 同步/异步并行抓取
- 分布式抓取
- 缓存
- 非unicode响应的自动编码
- robots . txt的支持
- 谷歌应用程序引擎支持
示例代码:
func main() {
c := colly.NewCollector()
// Find and visit all links
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
e.Request.Visit(e.Attr("href"))
})
c.OnRequest(func(r *colly.Request) {
fmt.Println("Visiting", r.URL)
})
c.Visit("http://go-colly.org/")
}
使用方式概括下来主要有三步:
- 创建一个采集器
- 注册回调函数
- 访问具体网站
创建采集器时可以指定一些配置参数,如useragent,爬取深度及日志等
colly.NewCollector(colly.UserAgent("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"),
colly.MaxDepth(1),
colly.Debugger(&debug.LogDebugger{}))
回调函数共有7种
名称 | 说明 | 参数1 | 参数2 |
---|---|---|---|
OnRequest | 请求前调用 | *colly.Request | |
OnError | 请求发生错误时调用 | *colly.Response | error |
OnResponseHeaders | 收到响应头后调用 | colly.Response | |
OnResponse | 收到响应后调用 | colly.Response | |
OnHTML | 响应内容是HTML时调用 | xpath表达式 | func(e *colly.HTMLElement) |
OnXML | 响应内容是XML时调用 | xpath表达式 | func(e *colly.XMLElement) |
OnScraped | 在OnXML之后调用 | func(r *colly.Response) |
colly,让我相信爬虫除了用python,我们用golang也是一个不错的选择。