gocolly-基本使用(1)

文章目录

介绍

章节以案例为主,搭载少量的解说.
本章节介绍基本的使用,获取网页的信息.

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

demo

package main

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

func main() {
	// 实例化默认收集器
	c := colly.NewCollector()

	// 仅访问域
	c.AllowedDomains = []string{"quotes.toscrape.com"}

	// 表示抓取时异步的
	c.Async = true

	// 模拟浏览器
	c.UserAgent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.75 Safari/537.36"

	// 限制采集规则
	/*
		在Colly里面非常方便控制并发度,只抓取符合某个(些)规则的URLS
		colly.LimitRule{DomainGlob: "*.douban.*", Parallelism: 5},表示限制只抓取域名是douban(域名后缀和二级域名不限制)的地址,当然还支持正则匹配某些符合的 URLS

		Limit方法中也限制了并发是5。为什么要控制并发度呢?因为抓取的瓶颈往往来自对方网站的抓取频率的限制,如果在一段时间内达到某个抓取频率很容易被封,所以我们要控制抓取的频率。
		另外为了不给对方网站带来额外的压力和资源消耗,也应该控制你的抓取机制。
	*/
	// err := c.session.Limit(&colly.LimitRule{DomainGlob: "*.quotes.*", Parallelism: 5})
	// if err != nil {
	// 	fmt.Println(err)
	// }

	// 访问地址
	url := "http://quotes.toscrape.com"

	c.OnHTML(".pager .next a", func(e *colly.HTMLElement) {
		// 获取属性值
		link := e.Attr("href")
		fmt.Printf("Link found: %q -> %s\n", e.Text, link)

	})

	c.OnError(func(_ *colly.Response, err error) {
		fmt.Println("Something went wrong:", err)
	})

	// 结束
	c.OnScraped(func(r *colly.Response) {
		fmt.Println("Finished", r.Request.URL)
	})

	// 开始爬取 url
	err2 := c.Visit(url)
	if err2 != nil {
		fmt.Println("err2", err2)
	}

	// 采集等待结束
	c.Wait()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值