singoriensis
spider library with golang
singoriensis是参考了scrapy而编写的golang版本简单易用且高效的spider library
概述
singoriensis参考scrapy的架构,分成了downloader、scheduler、pipeliner三层,并添加了针对返回数据信息处理的process,其数据流如下:
开始
一个简单且完整的例子如下:
import (
//...
"github.com/ErosZy/singoriensis/common"
//...
)
type MyProcess struct {}
func (process *MyProcess) Do(page *common.Page) {
//handle something
}
spider := sg.NewSpider("test", &MyProcess{})
downloader := sg.NewDownloader()
downloader.SetSleepTime(2 * time.Second) // 对每个go程的休眠时间
downloader.SetRetryMaxCount(0) // 设置最大失败重试次数
downloader.RegisterMiddleware(mw.NewDefaultDownloaderMiddleware())
requests := []sg.interfaces.RequestInterface{sg.NewReuqest(downloader)}
downloader.SetRequests(requests)
scheduler := sg.NewScheduler()
scheduler.SetUrlHeap(sg.NewDefaultUrlHeap(50))
scheduler.RegisterMiddleware(mw.NewDefaultSchedulerMiddleware())
pipeliner := sg.NewPipeliner()
pipeliner.RegisterMiddleware(mw.NewDefaultPipelinerMiddleware())
spider.SetThreadNum(1) // 设置下载go程数
spider.SetDownloader(downloader)
spider.SetScheduler(scheduler)
spider.SetPipeliner(pipeliner)
spider.AddUrl("http://www.baidu.com")
spider.AddUrl("http://www.sohu.com");
spider.Run()
接口
singoriensis面向接口编程,这样你可以更简单的编写你自己的核心对象及其中间件,其接口定义位于interfaces文件夹下:
- downloaderInterface : 核心下载对象
- downloaderMiddlewareInterface : 下载中间件对象,你可以在这里处理连接代理,登陆模拟等需求
- schedulerInterface : 核心调度对象
- schedulerMiddlewareInterface : 调度中间件对象
- pipelinerInterface : 核心存储流对象
- pipelinerMiddlewareInterface : 存储中间件对象,可以按照顺序进行数据的存储,如log --> mysql --> elasticsearch
- processInterface :内容解析处理,解析出需要的url及存储的内容
- urlHeapInterface : url冲重复过滤,你可以使用redis,也可以使用bloomfilter算法等对url进行重复过滤
- requestInterface : 请求实体