crawler数据收集
crawler数据采集以任务的方式执行,可以在数据采集管理页面对采集任务进行维护。采集任务可以与任务调度框架进行整合,实现定时采集。
crawler使用colly和rod框架进行html数据采集,使用go原生net/http实现文件下载功能(可绕过网站cors限制)。
以下是对crawler的主要特点和特色功能进行说明。
采集任务可配置化
采集任务CrawlerJob的配置信息有以下内容:
| 名称 | 说明 |
|---|---|
jobName | 任务名称,采集任务的唯一标识 |
jobDesc | 任务说明,采集任务的介绍和说明信息 |
resCate | 资源类别,包括:图片、小说、电影等 |
siteUrl | 资源站点地址 |
timeout | 页面加载超时时长 |
jobProps | 任务定制化配置信息,针对具体任务的个性化配置 |
系统默认使用数据库存储配置信息,可以在采集任务的管理页面上对以上信息进行维护。
任务执行与任务调度解耦
将数据采集过程模板化,设计为crawler.Executor采集任务执行器:
go
// Handler 采集任务处理
type Handler func(*Context) error
// Callback 采集任务回调
type Callback func(*Context)
// Executor 采集任务执行器
type Executor struct {
Name string // 采集任务名称
PreHandle Handler // 爬取前的预处理
Handle Handler // 爬取过程
PostHandle Handler // 爬取后的处理
OnSuccess Callback // 爬取成功回调
OnFailure Callback // 爬取失败回调
context context.Context
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
crawler.Context采集任务上下文对象包含以下信息:
go
// Context 采集任务上下文
type Context struct {
Name string // 采集任务名称
CrawlerJob *entity.CrawlerJob // 采集任务配置
CrawlerJobLog *entity.CrawlerJobLog // 采集日志
Payload any // 爬取内容载体
Error error // 错误
SaveLog bool // 是否存储日志
Ctx context.Context // 内置上下文对象
}1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
调用registerExecutor(name string, executor *crawler.Executor)方法注册采集任务执行器,name参数传入任务名称即可关联采集任务。
任务执行方式灵活
与任务调度框架整合之后,可以实现定时采集。在采集任务管理页面通过接口调用的方式也能触发任务的执行。
评论区留言准则:
1. 本评论区禁止传播封建迷信、吸烟酗酒、低俗色情、赌博诈骗等任何违法违规内容。
2. 当他人以不正当方式诱导打赏、私下交易,请谨慎判断,以防人身财产损失。
3. 请勿轻信各类招聘征婚、代练代抽、私下交易、购买礼包码、游戏币等广告信息,谨防网络诈骗。