Scrapling:自适应爬虫抓取神器开源发布

GitHub精选

Scrapling 是安全研究员 Karim Shoair(D4Vinci)开源的 Python 自适应爬虫框架,能够从单次请求到全站爬取一站式完成,同时自动规避各类反爬机制。项目上线以来在 GitHub 获得近 5 万星标,是目前增长最快的爬虫工具之一。

  • 三阶 Fetcher 架构:常规 Fetcher 通过 curl_cffi 实现 TLS 指纹伪装,DynamicFetcher 使用 Playwright 渲染 JS 页面,StealthyFetcher 进一步叠加完整浏览器指纹伪造并内置 Cloudflare Turnstile 自动求解
  • 自适应元素追踪:通过相似度算法自动重定位 DOM 元素,网站改版后无需手动更新选择器;auto_save 首次抓取时记录元素特征,adaptive 模式在站点重设计后自动找回目标元素
  • 内置 MCP Server:支持 Claude、Cursor 等 AI 工具直接调用爬取能力,减少 token 消耗并加速数据获取
  • 交互式 Shell:基于 IPython 定制的命令行界面,支持 curl 语法一键转换为 Scrapling 调用,实时调试元素选择器
  • 暂停与恢复:基于检查点的持久化机制,Ctrl+C 优雅退出后可断点续爬,适合大规模长时间爬取任务
  • 开发模式缓存:将响应缓存至磁盘,离线重放无需重复请求服务器,大幅降低开发阶段的网络依赖

反爬对抗的终局不是暴力,而是自适应

传统爬虫工具的升级路径通常是”被屏蔽 → 加代理 → 被检测 → 换指纹”,这种被动响应模式在 Cloudflare Turnstile、JS Challenge 等新一代反爬机制面前越来越力不从心。Scrapling 的切入角度完全不同——它在设计之初就把反爬视为一个持续对抗的问题,而非一次性攻防。

以 Cloudflare Turnstile 为例,大多数爬虫需要额外接入第三方打码服务或编写复杂的 Puppeteer 脚本,而 Scrapling 的 StealthyFetcher 已将 Turnstile 自动求解内建为原生能力,配合 DNS-over-HTTPS 防泄漏、约 3500 条广告与追踪域名自动拦截,以及内置的代理轮换器(ProxyRotator),构成了一套完整的防检测链路。相比之下,Playwright 原生方案需要手动处理每个验证码环节,而 Scrapy 则需要组合至少三到四个第三方中间件才能达到类似效果。

{COVER_URL_PLACEHOLDER}

工程化程度:从单脚本到生产管线的完整覆盖

Scrapling 最值得关注的工程特性是其 Spider 框架的设计语言——它采用了与 Scrapy 高度相似的 API 风格(start_urls、异步 parse 回调、Request/Response 对象),大幅降低了 Scrapy 用户的迁移成本。但 Scrapling 的差异化优势在于多会话支持:允许在同一个 Spider 中混合普通 HTTP 会话和隐身浏览器会话,并通过会话 ID 路由请求。这对于需要同时处理静态页面和 JS 渲染页面的混合爬取场景极为实用,而 Scrapy 要实现类似能力需要自行管理多个 Downloader Middleware。

在性能层面,该项目公布的基准测试显示,在 5000 层嵌套元素的文本提取场景中,Scrapling 耗时 2.02ms,与 Parsel/Scrapy(2.04ms)基本持平,大幅领先 PyQuery(24.17ms)和 BeautifulSoup + lxml(1584ms)。其相似度搜索比 AutoScraper 快 5.2 倍(2.39ms vs 12.45ms)。不过这些对比数据侧重于极端嵌套场景,日常使用中差距不会如此悬殊。

项目还提供了 CLI 命令 scrapling extract,允许不写代码直接运行爬取任务并输出 Markdown、纯文本或 HTML 格式。Docker 镜像随每个版本自动构建,包含所有浏览器运行环境,进一步降低了部署门槛。据项目文档介绍,其测试覆盖率达到 92%,且每次提交均通过 PyRight 和 MyPy 的类型检查。截至 v0.4.7 版本,项目仍处于快速迭代期,部分高级功能在 0.4.3 后才加入,整体 API 的稳定性仍需更多生产环境验证方能判断。


参考:GitHub: D4Vinci/Scrapling