我们可以先在文档先了解一下
go-colly

c.OnRequest(func(r *colly.Request) {fmt.Println("Visiting", r.URL)
})//请求之前调用c.OnError(func(_ *colly.Response, err error) {log.Println("Something went wrong:", err)
})//请求期间发生错误调用c.OnResponseHeaders(func(r *colly.Response) {fmt.Println("Visited", r.Request.URL)
})//在收到响应头后调用c.OnResponse(func(r *colly.Response) {fmt.Println("Visited", r.Request.URL)
})//收到恢回复后调用c.OnHTML("a[href]", func(e *colly.HTMLElement) {e.Request.Visit(e.Attr("href"))
})//收到的是html,之后调用c.OnHTML("tr td:nth-of-type(1)", func(e *colly.HTMLElement) {fmt.Println("First column of a table row:", e.Text)
})c.OnXML("//h1", func(e *colly.XMLElement) {fmt.Println(e.Text)
})//收到的是xml之后调用c.OnScraped(func(r *colly.Response) {fmt.Println("Finished", r.Request.URL)
})//回调之后调用

通过我们自己写的回调函数,当请求之前或接收之后等其他情况会调用函数
常用函数

c.Visit(url)//你要访问的url
c.OnHTML("匹配",func())
//onhtml()函数是返回html之后才调用的函数。
//通过第一个参数的匹配,如果返回的html中没有匹配到,则不会调用此回调函数。
//在c.OnHTML()中,如果再次使用c.Visit(),则会进行递归调用,再次使用c.OnHTML()。
c.OnHTML("*",func())如果,筛选条件变为*,通配符,则无论返回什么样的html,都会调用此回调函数
//所以,如果需要递归调用,则不能使用通配符
colly.MaxDepth()//设置最深递归层数
colly.AllowURLRevisit()//有时,爬虫需要重复爬取,如果不调用此方法,在第二次访问同一个url时,会报错
c.AllowURLRevisit=true//用处同上
c.AllowedDomains=//传递一个字符串的数组,如果设置此参数,则只能访问此参数里面的url,如果为空,则不会拦截
c.

入门案例

package mainimport ("flag""fmt""github.com/gocolly/colly""time"
)type Desc struct {ID int ` gorm:"primary_key;auto_increment"`Title stringViewNum string
}
func main() {Csdn_views(100,"https://blog.csdn.net/Xiang_lhh")
}
func Csdn_views(num int , url string){// Instantiate default collectorc := colly.NewCollector(//初始化colly)c.AllowURLRevisit=true//允许重复访问链接c.OnHTML("div.navList-box", func(e *colly.HTMLElement) {//回调函数,查找每篇文章的子链接e.ForEach("article.blog-list-box", func(i int, element *colly.HTMLElement) {//遍历每个article标签http_articleid:=element.ChildAttr("a","href")//得到标签属性c.Visit(http_articleid)//递归访问子链接time.Sleep(time.Second)//间隔一秒})})c.OnHTML("div.article-header-box", func(e *colly.HTMLElement) {//自动匹配每篇文章的htmldom:=e.DOM//返回DOM对象title:=dom.Find("h1.title-article").Text()//找到文章标题view_num:=dom.Find("span.read-count").Text()//找到每篇文章的访问量//注意colly为递归调用,不会重复刷新文章列表的页面,如果从文章列表中获取访问量,则访问量不会改变fmt.Println("访问成功","标题:",title,"阅读量:",view_num)})c.OnError(func(response *colly.Response, err error) {fmt.Println("错误",err,response)//如果出错,进行输出})// Before making a request print "Visiting ..."c.OnRequest(func(r *colly.Request) {//访问之前fmt.Println("Visiting", r.URL.String())})// Start scraping on https://hackerspaces.orgtotal:=1//访问次数for total<=num{fmt.Println("第",total,"次刷博客")fmt.Println("等待三十秒钟自动开启...")time.Sleep(time.Second*30)//每刷全部博客一次,自动间隔三十秒err:=c.Visit(url)if err !=nil{fmt.Println("出现错误",err)}total++}
}

go-colly入门+案例相关推荐

  1. 2021年大数据Flink(八):Flink入门案例

    目录 Flink入门案例 前置说明 API 编程模型 准备工程 pom文件 log4j.properties Flink初体验 需求 编码步骤 代码实现 Flink入门案例 前置说明 API API ...

  2. Python:Scrapy的安装和入门案例

    Scrapy的安装介绍 Scrapy框架官方网址:http://doc.scrapy.org/en/latest Scrapy中文维护站点:http://scrapy-chs.readthedocs. ...

  3. Vue安装配置以及入门案例

    Vue Vue简介 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不 ...

  4. AOP配置开发入门案例

    该AOP开发入门案例采用XML文件方式配置开发(非注解方式)共包含一个xml文件和4个Java类,创建好web工程后引入相应jar包(文末会给出),建好包(若自定义包名注意更改类中的包名),将xml文 ...

  5. python与人工智能编程-总算明白python人工智能编程入门案例

    Python是非常简洁的一种脚本语言,写同样的程序,代码量仅为java的三分一,除了性能没有Java强之外,它的优点还是相当多的.以下是小编为你整理的python人工智能编程入门案例 下载Active ...

  6. mybatis基于注解的入门案例

    mybatis基于注解的入门案例:             把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句             同时需要在SqlMa ...

  7. python截图保存到内存卡_Python画月饼,云上过中秋,天池Python入门案例系列赛开启...

    阿里云天池推出了一个Python入门案例系列教程,在此之前他们还推出了一个Python基础训练营. 在天池龙珠计划Python训练营中,天池给学习者详细的介绍了Python的基础和进阶知识,根据学习者 ...

  8. Spring-Security 简介、入门案例详解、安全框架、权限验证 SSM项目 使用 JavaConfig配置

    Spring-Security 简介 一.介绍 二.详细步骤 1.创建一个maven项目 添加web 框架. 2.导入依赖 3.项目整体结构 4.Spring 容器配置 5.servletContex ...

  9. reactjs redux集中式状态管理最简入门案例

    reactjs redux集中式状态管理最简入门案例

最新文章

  1. 关于“#ifdef __cplusplus” 和 extern C 的问题
  2. Design Pattern - Adapter Pattern
  3. java linkedlist实例_Java Linkedlist原理及实例详解
  4. 【转】计算机人工智能技术纵览---入门部分
  5. WebService为手机开发提供服务
  6. linux磁盘健康监控,MegaCli监控RAID磁盘健康信息
  7. clob字段怎么导出_人人都会遇到的问题:Java 如何优雅的导出 Excel~
  8. H3CSE路由-配置OSPF高级
  9. OCM实验-备份恢复-控制文件
  10. python语言中的转义字符_怎么使用Python转义字符
  11. Linux 软件 缺少库查询
  12. 自定义圆角的ImageView 还可以实现图片的圆形、椭圆形展示。
  13. 小白一起学Android studio 创建项目
  14. 惠普1005w打印机使用说明书_【惠普NS1005w 一体机功能展示】卡槽|色带|APP|按钮|收纳_摘要频道_什么值得买...
  15. PDFBOX将PDF转图片(PNG背景透明)
  16. STM32-USB学习系列(六):USB-HID键盘的实现以及键盘报文描述符的简介
  17. HTML及css疑问解答题前端面试题
  18. 单片机指令MOV、MOVC、MOVX的区别与联系
  19. 计算机丢失dll文件怎么弄,电脑缺少DLL文件该怎么办? 这个办法轻松解决!
  20. Python学习22:Python之禅和PEP 8规范

热门文章

  1. VS PDB文件详解
  2. 我,32岁程序员,三十而立,扛起了整个家
  3. 7-1 求斐波那契数的尾数
  4. project制定项目计划
  5. 总之,总而言之的不同英文表达方式
  6. 程序员CMD命令大全
  7. Gradle ExtenionContainer 创建和使用扩展参数(extensions)详解
  8. win10家庭版安装docker后vm无法启动
  9. 【CSS】CSS的三大特性
  10. 湘潭大学2022软件工程程序设计实践平时练习一C/C++