爬虫1 colly

colly

colly是一个个go语言实现的轻量快速的爬虫框架,提供了简单直观的编程接口。

架构
无标题.png

colly中通过注册回调函数实现控制爬取一个页面时所有流程。

用一些回调事件抽象出了一个请求的生命周期

  1. 构建请求
  2. 发送请求
  3. 获取文档或数据
  4. 解析文档或清洗数据
  5. 数据处理或持久化

支持的回调事件主要有:

  • OnRequest 请求执行之前调用
  • OnResponse 响应返回之后调用
  • OnHTML 监听执行 selector
  • OnXML 监听执行 selector
  • OnHTMLDetach,取消监听,参数为 selector 字符串
  • OnXMLDetach,取消监听,参数为 selector 字符串
  • OnScraped,完成抓取后执行,完成所有工作后执行
  • OnError,错误回调

实例

package main

import (
    "fmt"

    "github.com/gocolly/colly/v2"
)

func main() {
    // Instantiate default collector
    c := colly.NewCollector(
        // url过滤条件
        colly.URLFilters(
            regexp.MustCompile("http://httpbin\\.org/(|e.+)$"),
            regexp.MustCompile("http://httpbin\\.org/h.+"),
        ),
                // 只爬取指定域名下的url
        colly.AllowedDomains("hackerspaces.org", "wiki.hackerspaces.org"),
    )

    // 在页面中捕捉到时 处理这个href 可以根据一定的过滤条件判断是否继续抓取这个url 在创建Collector时指定
    c.OnHTML("a[href]", func(e *colly.HTMLElement) {
        link := e.Attr("href")
        fmt.Printf("Link found: %q -> %s\n", e.Text, link)
        c.Visit(e.Request.AbsoluteURL(link))
    })
        // 
        c.SetCookies(URL string,siteCokkie)
    // 请求每个url前回调 可以提前写入cookie等信息
    c.OnRequest(func(r *colly.Request) {
        fmt.Println("Visiting", r.URL.String())
    })
    c.OnResponse(func(r *colly.Request) {
        // 可以在这里进行数据持久化
    })

    // 爬虫的起点
    c.Visit("https://hackerspaces.org/")
}

你可能感兴趣的:(爬虫1 colly)