
前言企业内部常需要周期性抓取外部网页文档、资讯、公开资料自动归档、同步至内部知识库。早期团队自研了一套批次爬虫框架依赖大量中间数据表、状态缓存、配置监听任务大多串行执行链路冗长、维护成本极高。为此我们重构了轻量化定时爬虫模块基于 Golang 原生 cron 实现极简调度剔除冗余数据库操作支持多采集任务并行统一兼容网页、PDF/Word/Excel 附件两类资源内置增量去重、文件归档、邮件告警完整能力。本文从架构、业务流程、落地价值三方面分享整套设计思路。一、整体调度架构设计1. 统一服务入口所有爬虫任务共用服务data-adapter-crawler-service-worker新旧两套调度逻辑完全隔离。 新版爬虫启动流程极简服务启动后单独开启协程运行定时调度器不阻塞主服务读取配置批量注册多站点采集任务内置任务互斥机制上一轮任务未完成到达定时时间直接跳过避免重复抓取服务重启 / 下线时通过信号优雅关闭调度器释放浏览器、数据库等资源。2. 云原生配置托管所有业务配置统一放在 K8s ConfigMap无需改代码、重新打包即可调整规则定时规则每个采集站点独立配置 cron 表达式灵活自定义执行频次邮件通知统一 SMTP 配置抓取完成自动推送汇总、异常告警存储平台鉴权内部知识库账号密钥用于上传抓取后的文件。3. 新旧爬虫核心对比表格对比维度新版轻量化 Cron 爬虫旧版自研批次爬虫调度依赖原生 cron无中间任务表大量任务缓存、状态数据表执行效率多站点任务并行执行批次间串行单批次最多 2 并发维护难度代码精简故障链路短层级复杂配置变更需监听刷新缓存部署成本随服务自动启动无额外程序状态流转多日志排查繁琐二、标准化通用采集流程外部站点资源分为两类统一以页面 URL 作为唯一标识做增量过滤全流程标准化处理纯网页内容无下载附件通过无头 Chrome 完整渲染页面调用浏览器原生 API 导出 PDF完整保留页面排版、图文内容。附件资源PDF/Word/Excel 下载链接直接下载原始文件保留原有格式不做格式转换。增量去重逻辑URL 作为每条资源唯一 ID对生成 / 下载的文件计算 MD5 哈希判断内容是否更新三重判断从未抓取过完整执行抓取、转存、入库流程URL 存在但 MD5 变更页面内容更新重新归档URL 与 MD5 均无变化直接跳过节约服务器资源。完整业务链路初始化日志、数据库、无头浏览器统一标准化页面链接为 HTTPS解析站点列表页提取全部待抓取条目逐条处理资源生成对应文件并校验版本登录内部知识库上传文件绑定文件唯一 ID将标题、发布时间、原文链接、文件 ID 等元数据存入数据库统计抓取指标任务结束自动发送邮件通知对接人。三、方案核心优势架构轻量化无过度设计摒弃重型分布式爬虫框架的复杂调度、中间存储仅依靠原生定时能力完成需求代码量大幅缩减新人上手快线上故障定位简单。高复用通用采集逻辑网页转 PDF、附件下载、MD5 去重、文件上传、邮件通知全部封装为公共能力新增采集站点仅需编写页面解析逻辑无需重复开发基础工具。工程化配套能力齐全原生适配 K8s 云原生部署支持动态修改定时、通知、存储配置自带任务互斥、优雅退出、增量更新、异常通知满足企业长期稳定运行要求。多任务并行提升效率不同站点抓取任务独立运行、互不阻塞对比旧框架串行执行模式大幅缩短整体采集耗时。四、适用场景与优化方向适用场景这套轻量化爬虫适合企业中小型周期性采集需求行业资讯、公开政策文档每日自动归档白皮书、公开报表、竞品资料定期抓取留存外部公开数据、榜单定时同步至内部知识库。后续可优化方向增加抓取失败自动重试、网络异常退避策略接入代理 IP 池解决站点反爬封禁问题增加随机 UA、页面延时加载降低拦截概率接入监控大盘上报抓取总量、失败率、运行时长等指标区分成功 / 失败邮件通知异常单独推送运维人员。五、选型总结对于中小规模内部定时采集场景重型分布式爬虫框架存在资源浪费、运维复杂的问题简单一次性脚本又无法满足长期稳定运行、增量更新、告警归档等工程化要求。基于 Go 原生 cron 的轻量化爬虫方案刚好平衡两者轻量无冗余、稳定性强、复用性高业务开发仅聚焦页面解析是企业内部文档、资讯周期性抓取的最优落地方案。