Go爬虫框架colly

golang爬虫框架colly

colly一款快速优雅的golang爬虫框架,简单易用,功能完备。

官网地址:http://go-colly.org/

包地址:import "github.com/gocolly/colly"

一个简单的例子:

package main

import (
    "fmt"
    "github.com/gocolly/colly"
)

func main() {
    c := colly.NewCollector()

    c.OnHTML("a", 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/")
}

使用方式概括下来主要有三步:

  1. 创建一个采集器

  2. 注册回调函数

  3. 访问具体网站

创建采集器时可以指定一些配置参数,如useragent,爬取深度及日志等

回调函数共有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)

OnHTML回调可以注册多个,匹配不同的xpath表达式

1. 爬取简书首页文章列表

通过浏览器开发者工具查看jianshu.com结构

文章列表为ul标签,中间每一项是li标签,li中包含content,content中包含title,abstract和meta标签

2.爬取文章列表和详情

文章列表和1方式一样,文章详情通过创建新的采集器访问详情页面

3. 爬取需要登录的网页

官网提供登录页处理的例子,但是大多数涉及验证码,不好处理,目前方式是手动登录,复制cookie写到爬虫请求头里

4. 内存任务队列

将需要爬取的连接放入队列中,设置队列并发数,可以并行爬取连接

5. redis任务队列

设置redis存储后,队列中URL存储在redis中,访问页面的cookie及访问记录也会保存在redis中

6.配置代理


Last updated

Was this helpful?