内容简介:最近主攻go的学习,在学完了基础语法,看完了无闻翻译的
最近主攻 go 的学习,在学完了基础语法,看完了无闻翻译的 《The way to go》 和ccmouse大神的 慕课网课程 后,感觉基础差不多了,继续深入挖掘ccmouse大神的爬虫项目,收获颇丰,感觉还是有一定的难度的,会继续啃下去,学习之余感觉自己实在是井底之蛙,无数光阴尽数浪费,无所建树,思维停留在最原始的层面,无法向前迈进;庆幸现在有所觉悟,人生匆匆几十载,时间是最宝贵的,不论哪个领域,选择一个自己认定的,低下头向前冲刺,丰富自己的头脑,提升自己的认知。好像扯得有点远了,下面是项目的总结。
- 项目有一个main.go的入口文件,然后是各个子目录功能文件夹;如图: engine是总的控制文件,把请求和正则解析push到总的slice []request中,fetcher主要是通过http库去获取页面body信息,model是要保存的人的信息struct
- 说完了目录结构,接下来介绍下流程:
- 整个单机版爬虫项目比较简单,但对我来说收货还是比较大的,其中涉及到一些技术细节,如接口定义,结构方法的使用,
- 后面还有并发版本和分布式版本,就比较复杂了,并发版是充分使用go的goroutine和chan,要在大的方向上理清楚思路,抽象出一些公用的方法和结构,重要的正则解析要做test工作,然后在此指引下一步步构建,不可盲目前进。首先并发版需要两个chan,一个in :=chan Request和另一个out:=chan ParseResult,并发版启动WorkerCount个goroutine去并发获取in chan url内容并解析出新url推送到out chan,同时并发版有一个scheduler调度器, 将初始的爬取Request(包括url和对应的parser,因为每个网址的parser规则不同所以要成组传输)放进scheduler里的workerChan即前面定义的in chan, 他俩是一个chan, 程序开始并发执行,由于执行的比较快会被爬取网站断掉, 可以用time.Tike(time)来限制速度,另爬取时可能要设置相应的header头,否则会被屏蔽掉.
- 由于并发版多个worker都在争抢Request去执行,控制力度比较小,只适用于单机,不适合多机器分布式部署,故演化出第三个版本:队列实现.队列执行效率和并发版执行效率差不多. scheduler调度器中有rqquestChan chan Request 和 workerChan chan chan Request(
注意这里是两个chan
), 在run方法中定义一个out chan ParseResult,和并发版相比而言,队列版多了workerChan 这个chan,主要用来实现队列的调度,TODO:细节 - 下面附上几张ccmouse大神的讲课ppt供大家理解,如有不清楚的欢迎下方留言讨论。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- golang学习笔记17 爬虫技术路线图,python,java,nodejs,go语言,scrapy主流框架介绍
- GO语言学习笔记(四)GO语言控制语句
- go语言学习
- Go语言学习
- C语言学习
- Go 语言学习案例
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。