惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

MyScale Blog
MyScale Blog
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
N
News and Events Feed by Topic
Recent Announcements
Recent Announcements
D
Docker
M
MIT News - Artificial intelligence
L
LangChain Blog
I
InfoQ
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Proofpoint News Feed
博客园_首页
MongoDB | Blog
MongoDB | Blog
美团技术团队
S
Schneier on Security
G
GRAHAM CLULEY
月光博客
月光博客
有赞技术团队
有赞技术团队
Vercel News
Vercel News
Scott Helme
Scott Helme
P
Privacy International News Feed
Last Week in AI
Last Week in AI
Recorded Future
Recorded Future
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Cloudflare Blog
Attack and Defense Labs
Attack and Defense Labs
Google Online Security Blog
Google Online Security Blog
Simon Willison's Weblog
Simon Willison's Weblog
量子位
S
Security @ Cisco Blogs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V
Visual Studio Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
NISL@THU
NISL@THU
N
Netflix TechBlog - Medium
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Spread Privacy
Spread Privacy
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
罗磊的独立博客
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Threatpost
L
Lohrmann on Cybersecurity
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Security Affairs
Cloudbric
Cloudbric
爱范儿
爱范儿
H
Heimdal Security Blog
PCI Perspectives
PCI Perspectives

Mereith's Blog

记一次代理转发问题的排查与解决 PVE DataCenter Manager 端口号跳转错误修复 k8s + jenkins + gitlab 触发器 【转载】没有编程生产力这样的东西 【后续】居然被 ddos 了 居然被 ddos 了 Tagger - 让版本标签管理更简单 openclash 开启后端口转发失效 nextjs 启动时执行代码 买了太多VPS不知道干什么,干脆做个网站 juhost Level-1 测评 VMISS CN - Hong Kong VMISS JP - Tokyo - BGP 测评 VMISS CN - Hong Kong - BGP HomeLab 的终点是 最近在做的事情 因为选择艰难症,自己写了一套开源博客系统 HomeLab 分享 我的个人工作流——开源项目推荐 动手写一个超简单的编译器 safari 插件开发 Safari Extensions Preferences 按钮无响应 设置移动端软键盘回车按钮文案 nginx proxy manager 非标准端口反代 Host 不对 监控 k8s ingress 自动添加域名 DNS 解析 使用 ingress 注解给 traefik ingress 添加中间件 使用流水线功能为文章添加固定结尾 为 VanBlog 添加一个小挂件 基于React/umi/egg自建博客系统 如何正确停止 NodeJS 子进程 k8s pod 替换策略 让威联通、pve 共享 ups 实现断电关机 Ubuntu 配置 samba 混合云部署k3s集群(基于wireguard) pve 无法启动 grub lvmid not found error antd Password 关闭自动补全 code-server node not found pve no quorum 错误 || 无法登录 pve Cannot Initiate CMAP Service pve 节点删不干净 PVE 指针(鼠标)漂移 pve 重启网络 Proxmox VE 直通显卡 ProxmoxVE (PVE) 7.0 换源升级 用 SOCAT 端口转发 git 无法 pull 仓库refusing to merge unrelated histories 用 vuepress 搭建私人知识库 js 防抖节流中的 this 与箭头函数 Dockerfile 给 Ubuntu 换源 docker 内访问宿主机 docker 删除无用镜像 css 实现展开收起动画 nginx 301 问题 Node.js 流式编程 关于我重写了三次博客项目这件事 css flex 布局超出隐藏 css 隐藏滚动条 css 文字超出隐藏并显示省略号 css 填充 svg 颜色 css 黑白滤镜 nginx 反代丢端口 docker-compose 部署 matomo 分析系统 基于 strapi 开发应用 strapi 关闭 Content Security Policy nginx 反代 rewite url ssh 通过跳板机访问目标机器 Cent os 7 安装 zsh 5.6 以上版本 win11 任务栏不合并 bash 数组操作 vim 修改文件格式为 unix k8s 集群 control-plane-endpoint 主机名 git https 保存密码 Bash 判断命令存在 & 重定向 python 导出项目依赖 cent os 7 安装 gcc 版本 9 System limit for number of file watchers reached cent os 7 安装 git 2.x css 下划线中间向两边滑动效果 linux 挂载 SMB/CIFS linux 清除 ACL windows 命令行安装 inf 驱动 css 文字不可选择 iperf3 网络测速工具 cent os 换源 k8s 1.21.3 从 docker 迁移到 containerd 解决Nginx安装错误:No package nginx available 问题 从pve的硬盘里导出数据 Errors were encountered while processing adguardhome配合clash pve中使用LXC容器安装OMV LXC直通硬盘 nginx反代模版 docker常用开启容器的命令 PVE的LXC容器中安装Docker ProxmoxVE系统分区相关 基于clash搭建旁路网关 Portainer添加节点 linux声卡设置及录音音 OpenWrt用VLAN PVE换源及去掉订阅提示和改端口 adguardhome踩坑
手撸一个nodejs分布式爬虫,还要可视化
wanglu@mereith.com (mereith) · 2023-06-30 · via Mereith's Blog

请注意,本文编写于 1071 天前,最后修改于 1071 天前,其中某些信息可能已经过时。

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

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

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

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

spider.png

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

介绍

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

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

任务生成器

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

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

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

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

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

执行器(爬虫)

大概是这样的:

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

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

状态上报

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

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

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

结尾

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

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