最近主攻go的学习,在学完了基础语法,看完了无闻翻译的《The way to go》和ccmouse大神的慕课网课程后,感觉基础差不多了,继续深入挖掘ccmouse大神的爬虫项目,收获颇丰,感觉还是有一定的难度的,会继续啃下去,学习之余感觉自己实在是井底之蛙,无数光阴尽数浪费,无所建树,思维停留在最原始的层面,无法向前迈进;庆幸现在有所觉悟,人生匆匆几十载,时间是最宝贵的,不论哪个领域,选择一个自己认定的,低下头向前冲刺,丰富自己的头脑,提升自己的认知。好像扯得有点远了,下面是项目的总结。
主要从事网页设计、PC网站建设(电脑版网站建设)、wap网站建设(手机版网站建设)、
成都响应式网站建设公司、程序开发、微网站、小程序开发等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了丰富的成都网站设计、
成都做网站、网络营销经验,集策划、开发、设计、营销、管理等多方位专业化运作于一体,具备承接不同规模与类型的建设项目的能力。
- 项目有一个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,主要用来实现队列的调度。试着描述下整个过程不一定清晰: - 下面附上几张ccmouse大神的讲课ppt供大家理解,如有不清楚的欢迎下方留言讨论。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享文章:go语言学习爬虫框架总结-创新互联
网页路径:
http://cxhlcq.com/article/goscp.html