工程化网页爬虫(Crawlee)
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @kunlungrowth/python-node-web-crawler。
技能介绍
你要解决的问题
写爬虫的人大多经历过这种失控:请求偶尔成功,改个页面结构就全挂;抓了大量结果却躺在本地文本里,没法喂给下游;封了 IP 才发现代码根本没做限速。这类「一次性脚本」的问题在于——它把异常当例外,而不是系统的一部分。缺少重试、去重、持久化和结构化,任何一处波动都会让整条链路崩掉。
这个技能如何工作
它把采集流程拆成可工程化的组件。Router 负责按 URL 模式分发处理函数,让你对不同页面用不同策略而不是一个函数硬扛所有情况。请求队列接管去重、自动重试和限速,把「抓不到」变成可观测的调度问题而不是半夜报警。存储层使用 Dataset 保存结构化结果、Key-Value 存状态、RequestQueue 持久化待抓队列,配合断点可恢复机制,重启后不用从头再来。遇到依赖 JS 渲染的页面,可切换 Puppeteer/Playwright 的浏览器模式,避免抓到空壳。
反封禁基线不是黑魔法,而是一组可执行的约束:控制并发与间隔、轮换 UA 避免单一指纹、必要时使用代理分布出口,并且始终尊重目标站点的 robots 协议。你可以按下面的清单做自检:
- 失败请求是否自动重试,而不是靠人去点重跑?
- 落库结果是结构化的,还是散落在一堆纯文本里?
- 任务中断后能否从队列恢复,而不是从零开始?
- 对 JS 渲染页面,是否用浏览器模式验证过,而不是假设它一定能出内容?
适用边界与注意点
这套方法适合需要长期运行、有明确下游消费场景的采集项目。如果你的需求只是临时确认一个页面有没有更新,上这套会有点重。常见的踩坑包括:不设限速导致 IP 被封并拖垮对方服务器;selectors 写死后页面一改就崩;忽略渲染时机导致抓到空壳页面。合规是底线——AI 输出以官方文档为准,采集行为必须遵守目标网站的 robots 与服务条款,避免侵犯版权或发起超负荷请求,涉及敏感数据时需要依规处理。
使用场景
- 为RAG系统批量采集网页内容,需要保证数据结构化存储并支持断点续抓
- 监控竞品页面更新,用Crawlee编写定时采集任务并自动处理反爬策略
- 从多个JS渲染页面抓取数据,需要使用无头浏览器模式并处理选择器变化
- Node.js/Python项目需要选型网页采集框架,要求支持队列持久化和自动重试
适合人员
- 后端工程师,需要为RAG项目搭建稳定网页采集管道,处理重试与限速
- 数据工程师,要把多个动态渲染站点的结构化数据入库并支持断点恢复
- 技术负责人,在选型Node.js或Python爬虫框架时评估Crawlee的工程化能力
- 独立开发者,想从脆弱的一次性脚本升级为可维护的采集系统