本项目基于golang开发,是一个开放的垂直领域的爬虫框架,框架中将各个功能模块区分开,方便使用者重新实现子模块,进而构建自己垂直方方向的爬虫。
本项目将爬虫的各个功能流程区分成Spider模块(主控),Downloader模块(下载器),PageProcesser模块(页面分析),Scheduler模块(任务队列),Pipeline模块(结果输出);
执行过程简述 :
执行过程相应的Spider核心代码,代码代表一次爬取过程:
// core processer func (this *Spider) pageProcess(req *request.Request) { // Get Page p := this.pDownloader.Download(req) if p == nil { return } // Parse Page this.pPageProcesser.Process(p) for _, req := range p.GetTargetRequests() { this.addRequest(req) } // Output if !p.GetSkip() { for _, pip := range this.pPiplelines { pip.Process(p.GetPageItems(), this) } } this.sleep() }
项目安装与示例执行
安装本包和依赖包
go get github.com/hu17889/go_spider go get github.com/PuerkitoBio/goquery go get github.com/bitly/go-simplejson
示例执行:
展示一个简单爬虫示例
示例的功能是爬取https://github.com/hu17889?tab=repositories下面的项目以及项目详情页的相关信息,并将内容输出到标准输出。
一般在自己的爬虫main包中需要实现爬虫创建,初始化,以及PageProcesser模块的继承实现。可以实现自己的子模块或者使用项目中已经存在的子模块,通过Spider对象中相应的Set或者Add函数将模块引入爬虫。本项目支持 链式调用 。
spider.NewSpider(NewMyPageProcesser(), "TaskName"). // 创建PageProcesser和Spider,设置任务名称 AddUrl("https://github.com/hu17889?tab=repositories", "html"). // 加入初始爬取链接,需要设置爬取结果类型,方便找到相应的解析器 AddPipeline(pipeline.NewPipelineConsole()). // 引入PipelineConsole输入结果到标准输出 SetThreadnum(3). // 设置爬取参数:并发个数 Run() // 开始执行
更对示例可参看examples。
具体模块的说明见模块说明