乐于分享
好东西不私藏

别再手动复制网页了!这个工具让 AI 秒读任何网站,RAG 知识库搭建神器

别再手动复制网页了!这个工具让 AI 秒读任何网站,RAG 知识库搭建神器

你有没有过这种经历——

想搭一个 RAG 知识库,让 AI 回答公司官网上的问题。结果一抓网页,全是 <div class="nav-item"> 这种 HTML 标签,夹杂着广告代码、导航栏、Cookie 弹窗、页脚链接……AI 读起来就像你读一封每句话都夹着乱码的信。

要么就是页面是 JavaScript 动态渲染的,传统爬虫抓下来一片空白。

更惨的是,几百个页面要处理,总不能手动一个个复制粘贴吧?

今天介绍的 Firecrawl,就是来终结这一切的。


一、Firecrawl 是什么?

一句话说清楚:Firecrawl 是一个把网页内容变成 AI 可读数据的爬取工具。

它解决的问题很聚焦——传统爬虫抓回来的是 HTML,而大模型需要的是干净的文本。中间这个"清洗"步骤,Firecrawl 帮你一步到位。

核心能力拆成三个关键词:

能力
说明
典型场景
Scrape(抓取)
给一个 URL,返回干净的 Markdown / HTML / JSON
抓单篇文档喂给 AI
Crawl(爬取)
给一个 URL,自动发现并递归爬取整站子页面
批量构建知识库
Extract(提取)
给 URL + Schema,用 LLM 自动提取结构化数据
从竞品页面提取价格、参数等

此外还有几个进阶能力:

  • Map:
    输入一个网站,极速获取该网站的所有 URL 列表
  • Search:
    搜索网络 + 抓取搜索结果,一步到位
  • Interact:
    在页面上模拟点击、填表、滚动等操作后再抓取

它和传统爬虫最大的区别:输出直接就是 LLM-Ready 的。 你不需要写正则去清洗数据,不需要处理编码问题,不需要自己搭浏览器集群处理 JS 渲染——Firecrawl 全帮你搞定了。


二、安装与配置:5 分钟搞定

2.1 注册获取 API Key

  1. 打开 https://www.firecrawl.dev,点击「Get Started Free」注册账号(支持 GitHub / Google 登录)
  2. 登录后进入 Dashboard,在左侧菜单找到「API Keys」
  3. 复制你的 API Key,格式类似:fc-xxxxxxxxxxxxxxxx

💡 免费额度:注册即送 1,000 积分/月,1 个页面消耗 1 积分,够你免费处理 1,000 个页面。不需要信用卡。

⚠️ 常见坑 #1:API Key 只在创建时显示一次,务必复制保存!丢了就得重新生成。

2.2 安装 Python SDK

# 推荐:在虚拟环境中安装
python -m venv firecrawl-env
source firecrawl-env/bin/activate  # Windows 用 firecrawl-env\Scripts\activate

# 安装 Firecrawl Python SDK
pip install firecrawl-py

⚠️ 常见坑 #2:包名是 firecrawl-py,不是 firecrawl!装错包会报 ModuleNotFoundError。

2.3 验证安装

from firecrawl import Firecrawl

# 初始化客户端,填入你的 API Key
firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")

# 快速测试:抓取一个网页
result = firecrawl.scrape("https://firecrawl.dev", formats=["markdown"])
print(result.markdown[:200])  # 打印前200个字符看看

如果输出了一段干净的 Markdown 文本,恭喜你,环境搞定了!🎉


三、实战案例 1:爬取单个网页并转为 Markdown

这是最常用的场景——你有一篇文章或文档页面,想把它转成干净的 Markdown 喂给 AI。

from firecrawl import Firecrawl

firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")

# 抓取单个网页,指定输出格式
doc = firecrawl.scrape(
    url="https://docs.firecrawl.dev",
    formats=["markdown", "html"]  # 可以同时获取多种格式
)

# 获取 Markdown 内容
print(doc.markdown)

# 获取元数据(标题、描述、语言等)
print(doc.metadata.title)        # 页面标题
print(doc.metadata.description)  # 页面描述
print(doc.metadata.language)     # 页面语言

就这么简单。一行 scrape() 调用,杂乱 HTML 变成了干净的 Markdown。

常用参数速查

参数
说明
推荐值
formats
输出格式
["markdown"]
(最常用);也支持 ["markdown", "html"]、["screenshot"]
only_main_content
只提取主内容(去掉导航/页脚/侧边栏)
True
(强烈推荐)
timeout
超时时间(毫秒)
30000
(默认),复杂页面可调到 60000
proxy
使用代理(绕过反爬)
"auto"
# 推荐配置:只提取正文内容,跳过导航栏和页脚
doc = firecrawl.scrape(
    url="https://example.com/blog/post-1",
    formats=["markdown"],
    only_main_content=True# 关键参数!过滤掉导航栏、页脚、侧边栏等噪音
)

⚠️ 常见坑 #3:有些网页的内容全部由 JavaScript 渲染,如果你发现 doc.markdown 返回的内容很少或为空,试试去掉 only_main_content=True,或者增加 timeout 时间让页面完全加载。


四、实战案例 2:批量爬取网站并构建知识库

单个页面不够用?Firecrawl 的 Crawl 功能可以递归爬取整个网站——你只需要给它一个入口 URL,它自动发现所有子页面。

from firecrawl import Firecrawl
from firecrawl.types import ScrapeOptions

firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")

# 爬取整个网站的文档页面
crawl_result = firecrawl.crawl(
    url="https://docs.firecrawl.dev",
    limit=50,                    # 最多爬取50个页面(防止跑飞了消耗太多积分)
    scrape_options=ScrapeOptions(
        formats=["markdown"],
        only_main_content=True# 每个页面只提取正文
    ),
    poll_interval=30# 每30秒检查一次进度
)

# 遍历所有爬取到的页面
for doc in crawl_result.data:
print(f"页面: {doc.metadata.source_url}")
print(f"内容预览: {doc.markdown[:100]}...")
print("---")

print(f"共爬取 {len(crawl_result.data)} 个页面")

精确控制爬取范围

很多时候你不需要整站,只要特定板块。用 include_paths 和 exclude_paths 精准控制:

# 只爬取文档目录,排除 API 参考页面
crawl_result = firecrawl.crawl(
    url="https://example.com/docs/",
    limit=100,
    scrape_options=ScrapeOptions(formats=["markdown"]),
    include_paths=["/docs/.*"],    # 只包含 /docs/ 开头的路径
    exclude_paths=["/docs/api/.*"]  # 排除 /docs/api/ 下的页面
)

异步爬取:大规模任务的正确姿势

如果你的目标网站有几百上千个页面,同步爬取会让脚本卡住很久。用异步模式更靠谱:

# 第一步:启动异步爬取任务
job = firecrawl.start_crawl(url="https://example.com", limit=200)
print(f"任务已启动,Job ID: {job.id}")

# 第二步:轮询检查状态(可以放到定时任务里)
import time

whileTrue:
    status = firecrawl.get_crawl_status(job.id)
print(f"当前状态: {status.status}, 已完成: {status.completed}/{status.total}")

if status.status == "completed":
for doc in status.data:
print(doc.metadata.source_url)
break
elif status.status == "failed":
print("爬取失败!")
break

    time.sleep(30)  # 每30秒检查一次

⚠️ 常见坑 #4:limit 参数一定要设!不然爬一个大站可能会消耗掉你所有积分。建议先用 Map 功能看看网站有多少页面,再决定 limit。

# 先用 Map 查看网站规模
url_list = firecrawl.map("https://example.com")
print(f"网站共有 {len(url_list)} 个可访问页面")

五、与 RAG 系统集成:让 AI 真正读懂网站

Firecrawl 的输出天然适合喂给 RAG 系统。下面展示两个主流集成方案。

5.1 方案一:结合 LangChain 构建问答系统

LangChain 内置了 FireCrawlLoader,集成非常丝滑:

# 安装依赖
pip install langchain-community firecrawl-py langchain-openai chromadb
from langchain_community.document_loaders import FireCrawlLoader
from langchain_openai import OpenAIEmbeddings, ChatOpenAI
from langchain_community.vectorstores import Chroma
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.chains import RetrievalQA

# ====== 第一步:用 FireCrawlLoader 加载网站内容 ======
loader = FireCrawlLoader(
    api_key="fc-YOUR-API-KEY",
    url="https://docs.firecrawl.dev",
    mode="crawl"# 支持 scrape / crawl / map 三种模式
)
docs = loader.load()
print(f"共加载 {len(docs)} 个页面")

# ====== 第二步:切分文档(RAG 的标准步骤) ======
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=1000,      # 每个文本块1000字符
    chunk_overlap=200# 块之间重叠200字符,防止语义断裂
)
chunks = text_splitter.split_documents(docs)
print(f"切分为 {len(chunks)} 个文本块")

# ====== 第三步:构建向量数据库 ======
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(
    documents=chunks,
    embedding=embeddings,
    persist_directory="./firecrawl_db"# 持久化存储
)

# ====== 第四步:构建 RAG 问答链 ======
qa_chain = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model="gpt-4o-mini", temperature=0),
    chain_type="stuff",
    retriever=vectorstore.as_retriever(search_kwargs={"k":3})
)

# ====== 第五步:提问! ======
answer = qa_chain.run("Firecrawl 的 Extract 功能是什么?怎么用?")
print(answer)

整个流程就是:Firecrawl 抓网页 → LangChain 切分+向量化 → LLM 问答,一条龙搞定。

5.2 方案二:结合 Dify 搭建知识库助手

如果你用 Dify 搭建 AI 应用(不需要写代码),思路如下:

  1. 用 Firecrawl 批量爬取目标网站:
    运行上面的 Crawl 脚本,把结果保存为 Markdown 文件
  2. 上传到 Dify 知识库:
    在 Dify 的「知识库」模块中,批量上传这些 Markdown 文件
  3. 创建聊天助手:
    在 Dify 中新建一个聊天助手应用,关联刚才创建的知识库
  4. 测试对话:
    直接在 Dify 界面中测试问答效果

如果你想更自动化,还可以在 Dify 的「工作流」中添加 HTTP 请求节点,直接调用 Firecrawl API,实现"定时更新知识库"的自动化流程。


六、API 使用与高级功能

6.1 结构化数据提取(Extract)

这是 Firecrawl 最强大的功能——不用写正则,用自然语言 + Schema 告诉 AI 你要什么数据,它自动提取。

from firecrawl import Firecrawl
from pydantic import BaseModel

firecrawl = Firecrawl(api_key="fc-YOUR-API-KEY")

# 用 Pydantic 定义你要提取的数据结构
classProductInfo(BaseModel):
    name: str# 产品名称
    price: str# 价格
    features: list[str] # 特性列表
    rating: str# 评分

# 在 scrape 中使用 JSON 格式提取
result = firecrawl.scrape(
    url="https://www.example.com/product/123",
    formats=[{
"type":"json",
"schema": ProductInfo.model_json_schema()
    }],
    only_main_content=False,
    timeout=120000
)

print(result)
# 输出示例:
# {'name': 'iPhone 16 Pro Max', 'price': '$1,199',
#  'features': ['A18 Pro芯片', '4800万像素', '钛金属设计'], 'rating': '4.8/5'}

甚至可以不提供 Schema,直接用 prompt 描述你要什么:

result = firecrawl.scrape(
    url="https://firecrawl.dev",
    formats=[{
"type":"json",
"prompt":"提取公司的使命宣言和核心产品功能列表"
    }],
    only_main_content=False,
    timeout=120000
)

6.2 处理 JavaScript 动态页面

Firecrawl 内置了 Chromium 浏览器引擎,JS 渲染页面默认就能处理。如果页面需要交互(比如点击"加载更多"),可以用 actions 参数:

# 在抓取前模拟用户操作:点击按钮、等待加载
doc = firecrawl.scrape(
    url="https://example.com/interactive-page",
    formats=["markdown"],
    actions=[
        {"type":"click", "selector":'button.load-more'},
        {"type":"wait", "milliseconds":2000},  # 等待2秒让内容加载
        {"type":"scroll", "direction":"down", "amount":500},
    ],
)

6.3 搜索功能

# 搜索网络并直接获取结果
results = firecrawl.search(
    query="Firecrawl RAG tutorial",
    limit=5# 返回5条结果
)
for result in results:
print(f"标题: {result.title}")
print(f"链接: {result.url}")
print(f"摘要: {result.snippet}")

七、与同类工具对比:Firecrawl vs Scrapy vs Jina Reader

维度
Firecrawl
Jina Reader
Scrapy
定位
AI 专属爬虫,输出即 LLM-Ready
极简网页阅读器,零摩擦调用
通用爬虫框架,需自写解析
输出格式
Markdown / HTML / 结构化 JSON / 截图
Markdown / JSON
自定义(需手写 Pipeline)
动态页面
✅ 内置 Chromium 渲染
✅ 支持 JS 渲染
⚠️ 需配合 Splash/Playwright
结构化提取
✅ LLM 驱动 + Schema 定义
❌ 仅输出 Markdown 文本
❌ 需手写 XPath/CSS 选择器
全站爬取
✅ 一行代码爬整站(Crawl/Map)
❌ 仅单页提取
✅ 最强,完全自定义
反爬处理
✅ 内置代理轮换 + 反反爬
⚠️ 需自带代理
⚠️ 需自配中间件
免费额度
1,000 积分/月(约1,000页)
较慷慨的免费额度
完全免费(开源)
学习成本
⭐ 极低
⭐ 极低(URL 前加前缀即可)
⭐⭐⭐ 较高
开源协议
AGPL-3.0
Apache-2.0
BSD

一句话选型:

  • 🏆 想快速搭 RAG 知识库 + 需要结构化提取 → 选 Firecrawl,开箱即用,全站爬取+提取一站式搞定
  • ⚡ 只提取几个页面的关键信息,追求最快上手 → Jina Reader,URL 前加 https://r.jina.ai/ 前缀就行
  • 🔧 需要完全定制化的大规模爬虫 → Scrapy 是老牌王者,但学习成本高,更适合专业爬虫工程师

八、适用场景与局限

适合你用的场景

  • ✅ 搭建 RAG 知识库,需要批量处理网页内容
  • ✅ 从多个页面提取结构化数据(产品价格、公司信息、文章摘要等)
  • ✅ 需要处理 JS 动态渲染的页面
  • ✅ 快速原型开发,不想花时间在数据清洗上

需要注意的局限

  • ❌ 单次 API 只能处理1个URL,批量处理需要用 Crawl 或循环调用
  • ❌ 免费版并发限制为2,大规模爬取需要升级付费版(Standard 版 $83/月,100 并发)
  • ❌ 积分按月清零,不累积到下月
  • ❌ 超大规模爬取(10万+页面) 成本较高,可能自建方案更经济
  • ❌ 极端反爬网站(需要登录+验证码的)可能仍然搞不定

九、总结

Firecrawl 的核心价值就一句话:让你从"处理网页格式"的苦力活中解放出来,专注于 AI 应用本身。

它最适合这三类人:

  1. AI 应用开发者:
    需要把网页内容喂给 RAG 系统,不想花时间清洗数据
  2. 数据分析师:
    需要从多个网页提取结构化信息(价格、参数、评论等)
  3. 自动化爱好者:
    想用最低成本搭建"AI 读网页"的工作流

免费 1,000 积分/月完全够你跑通全流程、验证效果。如果你正在搭建 RAG 知识库,Firecrawl + LangChain 这个组合,真的可以做到半小时从零到可用。

别再手动复制网页了,让 Firecrawl 帮你搞定吧 🔥


回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料