码迷,mamicode.com
首页 > 编程语言 > 详细

go语言学习爬虫框架总结

时间:2019-06-19 14:56:12      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:ike   页面   复杂   png   分布式部署   Go语言   使用   不可   一个   

  最近主攻go的学习,在学完了基础语法,看完了无闻翻译的《The way to go》和ccmouse大神的慕课网课程后,感觉基础差不多了,继续深入挖掘ccmouse大神的爬虫项目,收获颇丰,感觉还是有一定的难度的,会继续啃下去,学习之余感觉自己实在是井底之蛙,无数光阴尽数浪费,无所建树,思维停留在最原始的层面,无法向前迈进;庆幸现在有所觉悟,人生匆匆几十载,时间是最宝贵的,不论哪个领域,选择一个自己认定的,低下头向前冲刺,丰富自己的头脑,提升自己的认知。好像扯得有点远了,下面是项目的总结。

  1. 项目有一个main.go的入口文件,然后是各个子目录功能文件夹;如图:技术图片 engine是总的控制文件,把请求和正则解析push到总的slice []request中,fetcher主要是通过http库去获取页面body信息,model是要保存的人的信息struct
  2. 说完了目录结构,接下来介绍下流程:技术图片
  3. 整个单机版爬虫项目比较简单,但对我来说收货还是比较大的,其中涉及到一些技术细节,如接口定义,结构方法的使用,
  4. 后面还有并发版本和分布式版本,就比较复杂了,并发版是充分使用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头,否则会被屏蔽掉.
  5. 由于并发版多个worker都在争抢Request去执行,控制力度比较小,只适用于单机,不适合多机器分布式部署,故演化出第三个版本:队列实现.队列执行效率和并发版执行效率差不多. scheduler调度器中有rqquestChan chan Request 和 workerChan chan chan Request(注意这里是两个chan), 在run方法中定义一个out chan ParseResult,和并发版相比而言,队列版多了workerChan 这个chan,主要用来实现队列的调度,TODO:细节
  6. 下面附上几张ccmouse大神的讲课ppt供大家理解,如有不清楚的欢迎下方留言讨论。技术图片技术图片技术图片

go语言学习爬虫框架总结

标签:ike   页面   复杂   png   分布式部署   Go语言   使用   不可   一个   

原文地址:https://blog.51cto.com/jinjiang2009/2410892

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!