编辑
2023-06-30
后端技术
00
请注意,本文编写于 715 天前,最后修改于 715 天前,其中某些信息可能已经过时。

目录

介绍
任务生成器
执行器(爬虫)
状态上报
结尾

曾经我最开始入编程就是从爬虫开始的,后来很久都么接触过相关的技术。最近我有一堆 vps 闲置,配置都不高,不知道干什么用,好像就是 ip 资源比较值钱,为啥不做个爬虫呢?

它必须是分布式的,比如有日志,有重试机制,有任务管理,有可视化看板,还要能检测源站状态。

以前其实学过一些爬虫框架,但现在我想试试以目前的水平能不能手撸一个,毕竟温习原来的框架也需要时间不是。

断断续续写了大半天,写完了,还配了个看板,大概这样子:

spider.png

写完了盯着自己的看板,一种成就感不予言表。 不知不觉我好像真的具有了用代码来完成一整个事情的能力🤨(以前只能完成某件事的一部分),所以写一篇文章纪念一下。

介绍

整个架构并不复杂,大概分为几个组件(文件):

  • 任务生成器
  • 任务执行器(spider)
  • 状态上报器

任务生成器

这个组件会根据我的需求生成任务上传到数据库中,后面的执行器就会拉取任务执行,任务的状态信息也会存在数据库里。

以小说爬虫举例子,大概这个东西分为两步:

  • 探测小说站的所有小说 url 范围
  • 根据这个范围生成任务

每个任务大概有这两个核心字段:

  • 任务 url
  • 任务状态: idle | processing | success | failed

执行器(爬虫)

大概是这样的:

  • 根据最大并行限制,从数据库获取上一步生成的任务。把任务状态改成 processing
  • 爬取数据,保存
  • 如果成功了,状态就是 success,不然就是 failed
  • 中间哪里失败了,就回滚状态

当然,还有一些其他参数,不一一说明。另外我把每一个组件都抽成个类,对于这个组件,只要输入特定几个参数,并实现核心爬取函数就可以了。 改动很少的代码就可以完成不同种类任务的适配。

状态上报

一个很简单的 prometheus 上报器,他会每间隔一定时间,抓取数据库中任务表里不同状态的任务数量人后上报。

另外还会定时 ping 一下源站,看看延时啥的,也上报一下。 最后配一个看板就好啦。

配看板的过程中顺便温习了一下 grafanaprometheus 的部署和配置 - -

结尾

也许以后我会更好的抽象一下,抽象程度够高的话,我就做一个 nodejs 的爬虫框架(起码自己用着很舒服),然后写个 UI、写个后台,做一个爬虫解决方案?

其实我知道,有很多现有的方案,我这么折腾也没啥用,也算是重复造轮子。但是造轮子本身可以检验自己的技术,增加经验,实现之后真的是很快乐的事情,不是吗?

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:mereith

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!