Golang爬虫(一):colly库的使用

1.colly简介:

Colly是一个用于构建Web scraper的Golang框架。使用Colly,您可以构建各种复杂性的Web scraper,从简单的scraper到处理数百万个Web页面的复杂异步网站爬虫。Colly提供用于执行网络请求和处理所接收内容的API(例如,与HTML文档的DOM树交互)。

2.安装配置

安装
go get -u github.com/gocolly/colly/...
导入
import "github.com/gocolly/colly"

3.使用入门

Colly的主要实体是一个Collector对象。Collector在收集器作业运行时管理网络通信并负责执行附加的回调。要使用colly,您必须初始化Collector:

基础示例:

// 实例化默认收集器
c := colly.NewCollector(
	// 设置只允许访问的域名: hackerspaces.org, wiki.hackerspaces.org
	colly.AllowedDomains("hackerspaces.org", "wiki.hackerspaces.org"),
)

//将访问设备设为浏览器
c.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36"

// 对每个具有href属性的元素调用回调
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
	link := e.Attr("href")
	fmt.Printf("Link found: %q -> %s\n", e.Text, link)
	// 在页面上找到访问链接
	// 只有那些在alloweddomain中的链接才会被访问
	c.Visit(e.Request.AbsoluteURL(link))
})

// 在请求之前会调用该方法,打印出请求地址
c.OnRequest(func(r *colly.Request) {
	fmt.Println("Visiting", r.URL.String())
})

// 设置开始抓取的初始页面为:https://hackerspaces.org
c.Visit("https://hackerspaces.org/")

回调函数说明:
OnRequest:在请求之前调用
OnError:在请求中出现错误时调用
OnResponse:响应接收到之后调用
OnHTML:OnResponse 正确执行后,如果接收到的文本是HTML时执行
OnXML:OnResponse 正确执行后,如果接收到的文本是XML时执行
OnScraped: OnXML 回调后调用

模拟登陆示例
c := colly.NewCollector()
// 用户身份验证
err := c.Post("http://example.com/login", map[string]string{"username": "admin", "password": "admin"})
if err != nil {
	log.Fatal(err)
}

//  登录后的附加回调
c.OnResponse(func(r *colly.Response) {
	log.Println("response received", r.StatusCode)
})
c.Visit("https://example.com/")
队列使用示例
url := "https://httpbin.org/delay/1"
c := colly.NewCollector(colly.AllowURLRevisit())

// 创建一个包含两个使用者线程的请求队列
q, _ := queue.New(
	2, // 用户线程数
	&queue.InMemoryQueueStorage{MaxSize: 10000}, // 内存中队列的储存数量
)

c.OnRequest(func(r *colly.Request) {
	fmt.Println("visiting", r.URL)
	if r.ID < 15 {
		r2, err := r.New("GET", fmt.Sprintf("%s?x=%v", url, r.ID), nil)
		if err == nil {
			q.AddRequest(r2)
		}
	}
})

for i := 0; i < 5; i++ {
	// 像队列中添加url
	q.AddURL(fmt.Sprintf("%s?n=%d", url, i))
}
// 开始爬取队列中url
q.Run(c)

更多示例请参考官方示例:https://github.com/gocolly/colly/tree/master/_examples

你可能感兴趣的:(Golang爬虫(一):colly库的使用)