网页数据抓取器
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_87fe1a85/gwchen05。
技能介绍
当网页不再「静止」时
传统抓取脚本常在三类场景失效:
- 动态渲染失效:SPA 站点依赖 JS 执行,
requests拿到的仅是空壳 HTML - 反爬策略升级:云WAF拦截、设备指纹检测导致IP被封
- 数据质量失控:半结构化内容混杂,正则匹配脆弱易崩
这些痛点在新闻聚合、价格监控、舆情分析等场景尤为突出——你既需要精确提取正文实体,又得控制请求频率避免被封,更要隔离凭证避免泄露。
级联式抓取引擎
该技能采用渐进式策略升级架构,从轻到重逐级尝试:
- 静态分析层:
- 先用 requests + BeautifulSoup 尝试基础HTTP抓取
- 自动检测 Schema.org 结构化数据标记
- 计算内容启发式评分(标题长度/段落密度/链接占比)
- 动态渲染层:
- 静态层失败后自动启用 Playwright 无头浏览器
- 采用 networkidle 等待策略而非传统 load
- 支持增量保存(每50篇触发checkpoint)
- 智能增强层:
- 仅在清洁文本上运行LLM实体抽取(避免原始HTML浪费token)
- 结构化输出JSON包含 data_quality 评分与 method 溯源标记
关键设计原则:
- 声明式配置:CSS选择器写在YAML而非硬编码,适应站点改版
- 断点续传:
load_checkpoint机制防止崩溃丢失进度 - 优雅降级:LLM调用失败返回空结构+错误字段,绝不抛未处理异常
工程化安全边界
该技能在三个维度建立防护墙:
- 凭证隔离:
- 仅Stage 5(LLM实体抽取)需要 OPENROUTER_API_KEY 环境变量
- 生成的脚本强制使用 os.environ.get(),杜绝明文存储
- 永不直接读写 .env 文件
- 合规性约束:
- 强制遵守 robots.txt(Scrapy默认遵守,手工请求需手动检查)
- 同域请求间隔≥500ms,失败指数退避且限制最大重试次数
- 软付费墙仅允许DOM操作提取已发送内容,禁止服务端绕过
- 资源管控:
- 执行前扫描环境(磁盘空间/依赖安装/浏览器就绪状态)
- 风险预判:标记反爬机制、限速策略、编码问题并预置应对方案
适用场景:新闻聚合、价格监控、舆情分析等需要结构化实体抽取且高频更新的场景。不适用:需要破解付费墙、处理实时数据流、或依赖非公开API的场景。
使用场景
- 负责竞品价格监控的分析师,需要从采用JS动态加载的电商商品列表页批量提取价格与库存信息,并输出为可分析的JSON格式。
- 新闻聚合平台的内容工程师,需从多个采用不同排版规范的媒体网站抓取文章正文与作者实体,要求自动识别内容质量并标注提取方法。
- 舆情分析团队的数据工程师,需监控社交媒体讨论串中的用户观点,处理需要滚动加载的动态内容并提取发言时间戳与情感实体。
- 金融数据团队的爬虫工程师,需定期抓取企业财报公告页面,处理部分采用软付费墙展示摘要但完整内容已在DOM中的半公开场景。
适合人员
- 数据工程师:需要从动态网页提取结构化实体并生成可维护的抓取脚本,关注断点续传与凭证隔离机制。
- 内容平台后端开发者:负责对接多源网页内容,需处理不同站点的反爬策略与内容质量差异,寻求声明式配置方案。
- 学术研究数据收集员:需从新闻站点批量采集语料进行文本分析,关注启发式评分与Schema.org自动识别能力。
- 运维监控工程师:需定期抓取公开状态页面进行SLA监控,重视请求频率控制与优雅降级避免服务中断。