Colly爬虫学习01

Reads: 966 Edit

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)

Comments

Make a comment

www.ultrapower.com ,王硕的博客,专注于研究互联网产品和技术,提供中文精品教程。 本网站与其它任何公司及/或商标无任何形式关联或合作。