AI 爬虫工具怎么选:从抓取、结构化提取到浏览器 Agent

结合 Crawl4AI、Scrapling 的本地实验与 Stagehand 接口核对,比较 Firecrawl、browser-use、ScrapeGraphAI 的定位,按任务选择采集工具。

亿牛云技术团队2026年10月20日15 分钟阅读

采集文档、提取商品字段和操作动态页面,需要的能力不同。选工具前,先确定哪一步遇到了困难:页面拿不到、正文不干净、字段不好定位,还是必须执行交互。

这篇比较六个 GitHub 项目的定位,并引用同系列的本地实验。资料与实验更新于 2026 年 10 月 29 日。Crawl4AI、Scrapling 完成了无模型运行;Stagehand 跑通了确定性浏览器流程,模型方法仅做源码和类型核对;另外三个项目依据官方资料比较。

这些证据没有形成统一性能基准,因此不提供“最快”“最抗封”或总分排名。

从你的任务开始

任务先解决的环节候选路线
文档站转知识库数据URL 发现、正文清洗、来源保存Crawl4AI;托管需求下考察 Firecrawl
商品列表转 JSON稳定定位、字段与完整性检查Scrapling;语义抽取可考察 ScrapeGraphAI
筛选、翻页后读取数据页面状态和交互执行确定性脚本,按需加入 Stagehand
指令驱动多步骤网页任务规划、动作选择、结果判断browser-use;具体任务须单独验证

知识库数据不只是 Markdown。来源 URL、获取时间、重复内容和失败页面都影响后续检索质量。

浏览器 Agent 也不自动承担完整的站点级爬虫调度。任务交互、URL 队列和持续更新应分别确认。

把采集链路拆开比较

一条常见的数据流程如下。

加载图表中...

在这条链路外,还需要考虑任务调度、限速、重试和运行记录。某个库具有几项能力,不代表它已经替你完成整套运行系统。

六个项目各自适合什么

下表是能力定位,不是实测评分。

项目主要作用LLM 参与方式需要留意的边界
Crawl4AI获取页面、清洗和生成 AI 可用内容可不用模型,也可配置 LLM 抽取本地浏览器、缓存和数据更新由你管理
Firecrawl搜索、抓取、站点发现和数据输出 API随功能与配置变化开源自托管与托管服务分别评估
ScraplingPython 页面获取、解析、自适应定位和爬行能力本文定位实验不需要模型自适应返回需要业务验证
browser-use模型驱动的浏览器任务模型参与规划和操作多步执行结果与调用成本要单独测
Stagehand程序控制与语义动作、提取组合observe/act/extract 等可使用模型SDK 之外仍需组织分页、任务和验收
ScrapeGraphAILLM 与图式流程组织内容提取模型参与语义抽取自运行库与托管 API 的责任不同

先决定模型是否需要进入采集链路

“给 AI 用的数据”与“让 AI 执行采集”是两个选型条件。前者可以完全不调用模型;后者才需要为语义判断配置推理服务。

例如,你要把文档正文交给后续问答服务,采集阶段只需保留正文与来源。Crawl4AI 的本地示例已经验证了这条无模型路线。

如果你需要判断页面上哪个按钮代表“查看下一批有效商品”,语义动作才可能有价值。先确认固定选择器是否足够,再决定是否增加模型调用。

你遇到的情况可以先尝试什么仍需核对什么
已知文档 URL,正文在固定区域无模型获取与清洗正文、标题和来源是否完整
列表字段有稳定的业务属性明确选择器提取身份、字段及记录完整性
正文由 JS 延迟生成浏览器加业务状态等待是否读取了最终内容
点击与翻页步骤固定确定性浏览器脚本是否遍历到明确结束状态
操作目标依赖页面语义配置语义定位或动作模型是否选对目标,失败如何处理
多步骤任务需要临场规划考察浏览器 Agent任务边界、最终结果和调用成本

这个顺序可以避免把每次页面读取都变成推理请求。它是一种按任务缩小方案的做法,不是对模型调用节省比例的实测。

将部署方式与功能清单一起判断

工具选型还取决于谁负责运行。相同的项目名称,可能同时指向本地库、自托管服务和托管产品。

部署方式适合的前提你需要承担的工作
本地库或脚本你希望控制页面处理和输出环境、浏览器、失败记录及定时执行
自托管服务多个调用方需要共享采集接口服务可用性、容量、存储和升级
托管 API你愿意接受服务商的数据和计费约定接口集成、额度与结果质量核对

本地库给了你控制权,也把环境问题留给你。示例运行时固定了 Python、Node、浏览器和依赖版本,正是为了让这种控制能够被复查。

托管 API 减少的运维内容,应当按该产品的实际服务约定核对。开源仓库的接口说明不能替代托管服务条款,托管宣传也不能替代自托管验证。

本文对 Firecrawl 和 ScrapeGraphAI 的两种交付方式分别说明;没有假定它们具备完全相同的功能或表现。

把认证、队列和更新责任列出来

即使单页示例已经成功,持续采集仍然需要回答下面的问题。

决策要确认的具体问题不确认会发生什么
URL 身份相对地址、fragment 和重复链接如何处理同一文档可能重复入库
登录会话哪些页面必须复用同一身份中途可能读到登录页或 401
任务进度哪些 URL 已完成、哪些需要补采重启后可能重复或漏采
内容新鲜度缓存命中后是否仍需检查更新成功响应可能包含旧正文
结束条件如何确定列表或分页已经采完可能只采到部分记录
输出契约哪些字段缺失必须判失败错误数据可能进入下游

这张表描述应用需要作出的决定,并不宣称六个项目都缺少相关功能。选型时应逐项核对候选工具的接口,确认哪些由库提供,哪些由你的代码补齐。

后面的实验分别覆盖了其中一部分:Crawl4AI 检查发现与更新,Scrapling 检查记录身份,Stagehand 的确定性流程检查登录与分页。

本地实验提供了哪些证据

Crawl4AI:数据可追溯,需要明确缓存策略

使用 0.9.5 采集本地文档站,首轮得到三篇有效文档,第二轮四篇,正确识别新增一篇、修改一篇、未变两篇。动态正文、代码内容、表格字段和相对链接都进行了检查。

空正文 200 和 404 被单独记录。缓存实验还观察到:未启用 freshness 验证的 CacheMode.ENABLED 继续返回旧正文,BYPASS 才获取到修改。

因此,自托管文档采集可以先考察 Crawl4AI;是否按期更新,仍取决于你的发现、缓存与差异处理策略。

实现与复跑方法见 Crawl4AI 文档采集。

Scrapling:恢复候选不等于恢复完整列表

使用 0.5 测试固定商品数据。改类名后,自适应结果只得到 p1,漏 p2、p3;增加包装层后返回三个无 ID 节点;干扰卡片沿用原类名时,原查询直接命中 ad1。

源码 scrapling/parser.py:662-680 显示,自动保存使用首个元素,且原选择器有结果时不会触发重新定位。这解释了为什么不能只按返回节点数判断成功。

Scrapling 可作为 Python 采集候选,但你应将自适应结果作为需要核对的数据。实验没有验证它的吞吐、Spider 恢复或反爬表现。

完整对照见 Scrapling 改版实验。

Stagehand:确定性流程已运行,AI 效果尚未测量

使用 4.3.0 的本地浏览器,测试账号登录后筛选 active books,读取两页并核对三件商品。在保留稳定 ID、修改按钮文字和增加延迟的变体上,确定性流程也通过。

这证明了示例中的脚本和状态等待可以工作,不能证明模型具备相同表现。observe()、act()、extract() 的配置、返回结构与示例已核对类型和源码,没有调用模型 API。

若你需要把脚本和语义操作组合起来,可从 Stagehand 配置指南 开始,再在自己的模型和页面上验证。

托管 API 与自托管分别比较

Firecrawl 的官方 README 提供 Search、Scrape、Crawl、Map、Batch 等功能说明;SELF_HOST.md 同时说明,本地基线使用浏览器和基础获取,并需要为相关 AI 功能配置模型。

因此,使用托管 API 时,要确认额度、数据处理约定、可用功能与费用。自托管时,则要承担浏览器、队列、存储、代理和运维责任。不要把托管版宣传中的覆盖率和延迟直接套到本地部署。

ScrapeGraphAI 的官方 README 也区分自运行 scrapegraphai 与托管 SDK/API:前者由你配置模型和运行环境,后者将更多获取与运维工作交给服务商。

本文没有调用这两种托管服务,没有验证它们的额度消耗或本地/云端能力一致性。

browser-use 与 Stagehand 如何取舍

从公开接口定位看,browser-use 面向模型驱动的浏览器任务;Stagehand 适合在明确代码流程中加入语义定位、动作和提取。

如果任务步骤基本稳定,可先写确定性流程,再识别确实需要语义判断的位置。若步骤本身依赖模型规划,则应验证任务完成率、动作边界与失败后的处理。

这是基于项目定位的选型判断。本批没有对两者执行同任务、同模型的 AI 对照测试,不能据此比较准确率或 Token 效率。

代理和成本需要单独核算

成本来源要记录什么本次是否实测
页面获取与浏览器请求数、运行时间、资源占用小型本地流程,无容量基准
模型调用量、用量信息、任务重试未执行推理
托管 API实际计费单位、功能与额度未调用
代理流量、会话规则、出口质量未验证商业代理
数据质量漏采、重复、误匹配及返工本地样例有明确检查

代理处理访问路径,选择器和模型处理页面内容,两者解决的问题不同。换 IP 不会自动修复缓存中的旧正文,也不会纠正一个仍命中推荐卡片的选择器。

从失败结果反推下一步选择

有了候选工具,先定位失败属于哪个环节,再决定是否更换方案。

看到的现象优先检查本系列提供的依据
状态 200,但没有正文正文区域和加载条件Crawl4AI 将空正文单独报告
远端改了,导出内容没变缓存与更新策略ENABLED 探针继续读取旧内容
返回数量正常,但 ID 为空选择节点的层级Scrapling 包装层变体返回错层节点
选择器仍有结果,但内容不对是否命中其他业务对象干扰卡片保留旧类名并被返回
筛选后结果仍是旧列表是否等待了新的数据状态Stagehand 示例检查 generation 标记

这些问题中,有些需要修正配置或定位规则。直接换成模型并不能免除最终的数据核对,也不能证明原来失败的原因已经消失。

例如,Scrapling 的返回数量看起来正常时,业务 ID 检查仍然能阻止错误数据被当成商品列表。这种检查也可以保留到其他采集方案中。

用同一目标计算采集成本

如果比较两个候选方案,应固定目标页面、字段和完成条件。只比较一次 API 响应耗时,可能漏掉清洗、翻页和补采的代价。

可以将一次完整任务的记录按以下层次整理:

  1. 本轮发现了多少候选 URL,其中多少属于目标范围。
  2. 获取了多少页面,哪些响应为空或失败。
  3. 输出了多少完整记录,是否有漏项或错误身份。
  4. 为完成同一目标,额外执行了多少次重试或推理。
  5. 最终为哪些浏览器、API、模型或网络资源付费。

本批只验证小型本地任务及其输出,没有给出每千页费用。托管价格、模型计费和代理套餐可能变化,不宜把没有测量的数字写成固定成本。

你可以先保留这些记录,再代入自己实际使用的资源价格。字段完整性不达标的结果,也不应仅因请求便宜就算作有效产出。

在自己的任务上做最小验证

先选一小组有答案的页面,包含正常、动态、空结果和页面变化。定义字段、来源和完成条件,再固定依赖版本执行。

记录成功结果,也保留失败原因。尤其检查“状态成功但内容错误”的情况,而不是只统计请求成功率。

开始扩大规模前,再验证并发、会话、重试及运行成本。公开项目的功能清单可以帮助缩小范围,最终选择仍需要你的任务证据。

依次阅读哪篇实战

你下一步要做什么对应文章能复查的结果
把文档保存为后续 AI 可用的数据Crawl4AI 文档采集来源、失败、内容保留和两轮变化
处理列表结构变化Scrapling 改版实验漏采、错层节点和显式选择器修复
实现需要登录和翻页的采集Stagehand 配置指南确定性流程与可配置 AI 分支的区别

三篇都给出固定的示例源码版本和运行步骤。运行需要的浏览器或依赖安装与文章写作分开;Stagehand 模型配置由读者按需提供。

先选择最贴近你当前问题的一篇,核对输出后再扩展规模,可以让选型结论建立在任务结果上。

如何复查这份选型结论

先准备 Git 和可访问公开仓库的 GitHub CLI,获取固定版本的实验与证据文件。

gh repo clone 16yun-cn/www-16yun-cn-v3 ai-crawling-examples -- --filter=blob:none --sparse
cd ai-crawling-examples
git checkout --detach bc6828e62c417b1a3459199811fd4e2164137a5f
git sparse-checkout set scripts/blog-ai-crawling docs/blog-research

这个提交固定的是运行过的示例,不是要求你使用某个持续变动的开发分支。三篇实战中的代码行号也指向这个版本。

阅读证据时,要区分它可以支持哪一类结论。

依据可以支持什么不能直接推出什么
官方文档与源码接口及声明的功能边界你的页面上的成功率
固定样例的实际输出对应版本和场景的观察所有公网网站的表现
类型检查示例符合所用类型接口模型理解或提取准确率

这也是本文没有给六个项目打统一分数的原因。三类证据都保留了用途和限制,方便你决定还需要补做哪些验证。

资料与版本范围

可按以下仓库标识和路径核对来源;源码行号对应所列提交。

  • unclecode/crawl4ai,0.9.5,提交 888299f,crawl4ai/async_crawler_strategy.py:1096-1119。
  • D4Vinci/Scrapling,0.5,提交 0336400,scrapling/parser.py:662-680;相关 Issue #259。
  • browserbase/stagehand,4.3.0,提交 d59afde,packages/sdk-ts/src/stagehand.ts:246-324。
  • firecrawl/firecrawl,提交 33f295d,README.md:65-85;另核对自托管说明。
  • browser-use/browser-use,提交 2cc7189,README.md:103-173。
  • ScrapeGraphAI/Scrapegraph-ai,提交 194055e,README.md:168-180。

本项目源码中的 docs/blog-research/2026-10-ai-crawling-evidence.md 保留完整官方引用与证据说明,scripts/blog-ai-crawling/ 保留可复跑示例。

需要企业代理方案?

我们可根据目标站点、并发规模与稳定性目标提供定制方案。