术业有专攻,不要用原生 http 库自己写爬虫!
网管叨bi叨 2024-06-05 09:27 北京 3人听过以下文章来源于凉凉的知识库 ,作者凉凉的知识库
凉凉的知识库.凉凉的知识库,带你学点后端必备知识
有些人可能认为爬虫框架和http client库的功能一样,用http client库也可以写爬虫。当然,无论用第三方的http client库还是官方的http
库,都可以写爬虫。但术业有专攻,爬虫框架专门为批量爬取设计,往往拥有并发控制、队列、缓存、HTML解析等一系列开箱即用的API,能大幅简化在爬虫实现过程中的负担
Python中非常知名的爬虫框架有Scrapy
,Go中也有一些star数较高的爬虫框架。colly
就是其中的佼佼者,它API简洁,性能优良,开箱即用。今天就来快速学习一下吧!
基本使用
首先引入依赖
go get -u github.com/gocolly/colly/...
之后就可以使用colly
,通过Visit
函数来告知colly采集器要访问的URL
package main
import (
"fmt"
"github.com/gocolly/colly/v2"
)
func main() {
c := colly.NewCollector()
c.Visit("http://go-colly.org/")
}
这样就行了么?运行下试试,没有任何输出。
$ go run main.go
原因在于代码要求colly采集器访问http://go-colly.org/
,但没有设定访问URL成功或者失败后要执行的动作。colly
提供了一系列的回调函数,用于URL访问和响应过程中各种情况的处理
例如,可以设定访问URL前、响应成功、响应失败时不同逻辑的处理
package main
import (
"fmt"
"github.com/gocolly/colly/v2"
)
func main() {
c := colly.NewCollector()
c.OnRequest(func(r *colly.Request) {
fmt.Println("Visiting", r.URL)
})
c.OnResponse(func(r *colly.Response) {
fmt.Println("Visited", r.Request.URL)
})
c.OnError(func(_ *colly.Response, err error) {
fmt.Println("Something went wrong:", err)
})
c.Visit("http://go-colly.org/")
}
colly
提供的回调和回调的顺序如下图,每个回调可以设置多次,会依次执行
常规配置
配置分两部分,一部分是colly采集器的配置,一部分是HTTP的配置
标签:http,err,爬虫,术业,go,org,com,colly From: https://www.cnblogs.com/cheyunhua/p/18278673