Colly是Golang世界最知名的Web爬虫框架了,它的API清晰明了,高度可配置和可扩展,支持分布式抓取,还支持多种存储后端(如内存、Redis、MongoDB等)。
Colly的github地址:
https://github.com/gocolly/colly
Colly的文档
http://go-colly.org/docs/introduction/start/
资料参考
https://www.jianshu.com/p/5b8c039c432f
https://www.cnblogs.com/zhangyafei/p/11912589.html
colly网络爬虫例子
https://www.cnblogs.com/majianguo/p/8150060.html
Go 每日一库之 colly
https://jishuin.proginn.com/p/763bfbd6a169
官方文档
http://go-colly.org/docs/best_practices/multi_collector/
https://www.modb.pro/db/146999
colly Crawler 配置
https://www.cnblogs.com/liujie-php/p/11571153.html
Colly配置说明
AllowedDomains
设置收集器使用的域白名单,设置后不在白名单内链接,报错:Forbidden domain。
AllowURLRevisit
设置收集器允许对同一 URL 进行多次下载。
Async
设置收集器为异步请求,需很Wait()配合使用。
Debugger
开启Debug,开启后会打印请求日志。
MaxDepth
设置爬取页面的深度。
UserAgent
设置收集器使用的用户代理。
MaxBodySize
以字节为单位设置检索到的响应正文的限制。
IgnoreRobotsTxt
忽略目标机器中的robots.txt声明。
创建采集器
ollector := colly.NewCollector(
colly.AllowedDomains("www.baidu.com",".baidu.com"),//白名单域名
colly.AllowURLRevisit(),//允许对同一 URL 进行多次下载
colly.Async(true),//设置为异步请求
colly.Debugger(&debug.LogDebugger{}),// 开启debug
colly.MaxDepth(2),//爬取页面深度,最多为两层
colly.MaxBodySize(1024 * 1024),//响应正文最大字节数
colly.UserAgent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"),
colly.IgnoreRobotsTxt(),//忽略目标机器中的`robots.txt`声明
)
例子1
c := colly.NewCollector()
// selector goquery name id class
c.OnHTML(".sidebar-link", func(e *colly.HTMLElement) {
e.Request.Visit(e.Attr("href"))
content, _ := e.DOM.Html()
link := e.Attr("href")
link = "https://gorm.io/zh_CN/docs/" + link
fmt.Println("content=", content, link)
})
c.OnRequest(func(r *colly.Request) {
fmt.Println("url => ", r.URL)
})
// Start scraping on https://hackerspaces.org
c.Visit("https://gorm.io/zh_CN/docs")
出现问题
1,colly的请求网页超时问题异常信息如下
抛出以下问题context deadline exceeded (Client.Timeout exceeded while awaiting headers)
解决方法
c := colly.NewCollector( colly.MaxDepth(1), colly.DetectCharset(), colly.Async(true), colly.AllowURLRevisit(), ) c.SetRequestTimeout(120 * time.Second)