曾经我最开始入编程就是从爬虫开始的,后来很久都么接触过相关的技术。最近我有一堆 vps 闲置,配置都不高,不知道干什么用,好像就是 ip 资源比较值钱,为啥不做个爬虫呢?
它必须是分布式的,比如有日志,有重试机制,有任务管理,有可视化看板,还要能检测源站状态。
以前其实学过一些爬虫框架,但现在我想试试以目前的水平能不能手撸一个,毕竟温习原来的框架也需要时间不是。
断断续续写了大半天,写完了,还配了个看板,大概这样子:
写完了盯着自己的看板,一种成就感不予言表。 不知不觉我好像真的具有了用代码来完成一整个事情的能力🤨(以前只能完成某件事的一部分),所以写一篇文章纪念一下。
整个架构并不复杂,大概分为几个组件(文件):
这个组件会根据我的需求生成任务上传到数据库中,后面的执行器就会拉取任务执行,任务的状态信息也会存在数据库里。
以小说爬虫举例子,大概这个东西分为两步:
每个任务大概有这两个核心字段:
idle
| processing
| success
| failed
大概是这样的:
当然,还有一些其他参数,不一一说明。另外我把每一个组件都抽成个类,对于这个组件,只要输入特定几个参数,并实现核心爬取函数就可以了。 改动很少的代码就可以完成不同种类任务的适配。
一个很简单的 prometheus
上报器,他会每间隔一定时间,抓取数据库中任务表里不同状态的任务数量人后上报。
另外还会定时 ping
一下源站,看看延时啥的,也上报一下。 最后配一个看板就好啦。
配看板的过程中顺便温习了一下 grafana
和 prometheus
的部署和配置 - -
也许以后我会更好的抽象一下,抽象程度够高的话,我就做一个 nodejs
的爬虫框架(起码自己用着很舒服),然后写个 UI、写个后台,做一个爬虫解决方案?
其实我知道,有很多现有的方案,我这么折腾也没啥用,也算是重复造轮子。但是造轮子本身可以检验自己的技术,增加经验,实现之后真的是很快乐的事情,不是吗?
本文作者:mereith
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!