自动化工具 活跃维护

firecrawl

firecrawl/firecrawl

用于大规模搜索、抓取和互动的网络数据 API。🔥

182858
Stars 标星
9876
Forks 分支
469
Watchers 关注
643
Open Issues
TypeScript
主要语言
AGPL-3.0
开源协议
175.7 MB
仓库大小
1 个月前
最后推送
一键安装扩展 / 插件指令
dsh plugin --profile web add github:firecrawl/firecrawl
git clone https://github.com/firecrawl/firecrawl.git
git clone git@github.com:firecrawl/firecrawl.git
README.md main

英文原文正文为项目原始 README(英文),本站后续会翻译为中文,当前仅剔除图片与无关章节并统一排版。


🔥 火爬

用于大规模搜索、抓取和与网络交互的 API。🔥 这个网络数据 API 可以找到来源、提取内容,并将其转化为干净的 Markdown 或结构化数据,你的代理可以使用。开源并可作为托管服务使用。

噓,嘿,你,加入我们的观星者吧 :)


为什么选择 Firecrawl?

  • 行业领先的可靠性:覆盖 96% 的网页,包括 JavaScript 密集的页面——无需代理烦恼,只需干净数据(查看基准测试)
  • 极速:在数百万页面中,P95 延迟为 3.4 秒,专为实时代理和动态应用构建
  • 适合 LLM 的输出:干净的 Markdown、结构化 JSON、截图等——消耗更少 token,构建更好的 AI 应用
  • 我们处理难题:轮换代理、编排、速率限制、JS 阻挡的内容等——零配置
  • 代理就绪:通过一条命令将 Firecrawl 连接到任何 AI 代理或 MCP 客户端
  • 媒体解析:解析并提取网页托管的 PDF、DOCX 等内容
  • 操作:点击、滚动、输入、等待和按下操作后提取内容
  • 开源:透明且协作开发——加入我们的社区

功能概述

核心端点

功能 描述
搜索 在网络上搜索并获取结果的完整页面内容
抓取 将任何 URL 转换为 Markdown、HTML、截图或结构化 JSON
交互 抓取页面,然后使用 AI 提示或代码与其交互

更多

功能 描述
代理 自动数据收集,只需描述你的需求
抓取 使用单次请求抓取网站的所有网址
地图 立即发现网站上的所有网址
批量抓取 异步抓取成千上万的网址

快速开始

在 firecrawl.dev 注册以获取您的 API 密钥。尝试 playground 以测试它。

搜索

在网络上搜索并获取结果的完整内容。

from firecrawl import Firecrawl

app = Firecrawl(api_key="fc-YOUR_API_KEY")

search_result = app.search("firecrawl", limit=5)
Node.js / cURL / 命令行界面 (CLI)

Node.js

从 'firecrawl' 导入 { Firecrawl };

const app = new Firecrawl({apiKey: "fc-你的_API_KEY"});

app.search("firecrawl", { limit: 5 })

cURL

curl -X POST 'https://api.firecrawl.dev/v2/search' \
-H '授权: Bearer fc-你的_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
  "query": "firecrawl",
  "limit": 5
}'

命令行界面 (CLI)

firecrawl 搜索 "firecrawl" --limit 5

输出:

[
  {
    "url": "https://firecrawl.dev",
    "title": "Firecrawl",
    "markdown": "Turn websites into..."
  },
  {
    "url": "https://docs.firecrawl.dev",
    "title": "Firecrawl Docs",
    "markdown": "# Getting Started..."
  }
]

抓取

从任何网站获取适用于大语言模型的数据 — Markdown、JSON、截图等。

from firecrawl import Firecrawl

app = Firecrawl(api_key="fc-YOUR_API_KEY")

result = app.scrape('firecrawl.dev')
Node.js / cURL / 命令行界面 (CLI)

Node.js

从 'firecrawl' 导入 { Firecrawl };

const app = new Firecrawl({ apiKey: "fc-你的_API_KEY" });

app.scrape('firecrawl.dev')

cURL

curl -X POST 'https://api.firecrawl.dev/v2/scrape' \
-H '授权: Bearer fc-你的_API_KEY'
-H 'Content-Type: application/json' \
-d '{
  "url": "firecrawl.dev"
}'

CLI

firecrawl scrape https://firecrawl.dev
firecrawl https://firecrawl.dev --only-main-content

输出:

# Firecrawl

Firecrawl helps AI agents search, scrape, and interact with the web.

## Features
- Search: Find information across the web
- Scrape: Clean data from any page
- Interact: Click, navigate, and operate pages
- Agent: Autonomous data gathering

互动

抓取页面,然后使用AI提示或代码与其交互。

from firecrawl import Firecrawl

app = Firecrawl(api_key="fc-YOUR_API_KEY")

result = app.scrape("https://amazon.com")
scrape_id = result.metadata.scrape_id

app.interact(scrape_id, prompt="Search for 'mechanical keyboard'")
app.interact(scrape_id, prompt="Click the first result")
Node.js / cURL / 命令行工具

Node.js

从 'firecrawl' 导入 { Firecrawl };

const app = new Firecrawl({apiKey: "fc-你的_API_KEY"});

const result = await app.scrape("https://amazon.com");

await app.interact(result.metadata.scrapeId, { prompt: "搜索 '机械键盘'" })
});
await app.interact(result.metadata.scrapeId, { prompt: "点击第一个结果"
});

cURL

# 1. 抓取页面
curl -X POST 'https://api.firecrawl.dev/v2/scrape' \
-H '授权: Bearer fc-YOUR_API_KEY' "}
-H '内容类型: application/json' \
-d '{"url": "https://amazon.com"}'

# 2. 与页面交互(使用第1步的 scrapeId)
curl -X POST 'https://api.firecrawl.dev/v2/scrape/SCRAPE_ID/interact' \
-H '授权: Bearer fc-YOUR_API_KEY' "}
-H '内容类型: application/json' \
-d '{"prompt": "搜索机械键盘"}'

命令行界面

firecrawl scrape https://amazon.com
firecrawl interact exec --prompt "搜索 '机械键盘'"
firecrawl interact exec --prompt "点击第一个结果"

输出:

{
  "success": true,
  "output": "Keyboard available at $100",
  "liveViewUrl": "https://liveview.firecrawl.dev/..."
}

为您的代理提供动力

在几分钟内将 Firecrawl 连接到任何 AI 代理或 MCP 客户端。

技能

只需一条命令即可让您的代理轻松访问实时网络数据。

npx -y firecrawl-cli@latest init --all --browser

安装后重启你的代理。可与 Claude Code、Antigravity、OpenCode 等一起使用。

MCP

几秒钟内将任何支持 MCP 的客户端连接到网络。

{
  "mcpServers": {
    "firecrawl-mcp": {
      "command": "npx",
      "args": ["-y", "firecrawl-mcp"],
      "env": {
        "FIRECRAWL_API_KEY": "fc-YOUR_API_KEY"
      }
    }
  }
}

代理入职

你是一个AI代理吗?获取此技能以注册你的用户,获取API密钥,并开始使用Firecrawl构建项目。

curl -s https://firecrawl.dev/agent-onboarding/SKILL.md

查看Skill CLI 文档以获取所有可用命令。对于 MCP,请参见firecrawl-mcp-server。


更多端点

代理

从网络获取数据的最简单方法。 描述你的需求,我们的 AI 代理会搜索、浏览并获取数据。不需要提供 URL。

代理是我们 /extract 端点的升级版:更快、更可靠,而且无需你事先知道 URL。

curl -X POST 'https://api.firecrawl.dev/v2/agent' \
  -H 'Authorization: Bearer fc-YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "prompt": "Find the pricing plans for Notion"
  }'

回应:

{
  "success": true,
  "data": {
    "result": "Notion offers the following pricing plans:\n\n1. Free - $0/month...\n2. Plus - $10/seat/month...\n3. Business - $18/seat/month...",
    "sources": ["https://www.notion.so/pricing"]
  }
}

具有结构化输出的代理

使用模式获取结构化数据:

from firecrawl import Firecrawl
from pydantic import BaseModel, Field
from typing import List, Optional

app = Firecrawl(api_key="fc-YOUR_API_KEY")

class Founder(BaseModel):
    name: str = Field(description="Full name of the founder")
    role: Optional[str] = Field(None, description="Role or position")

class FoundersSchema(BaseModel):
    founders: List[Founder] = Field(description="List of founders")

result = app.agent(
    prompt="Find the founders of Firecrawl",
    schema=FoundersSchema
)

print(result.data)
{
  "founders": [
    {"name": "Eric Ciarla", "role": "Co-founder"},
    {"name": "Nicolas Camara", "role": "Co-founder"},
    {"name": "Caleb Peffer", "role": "Co-founder"}
  ]
}

带有 URL 的代理(可选)

将代理集中在特定页面上:

result = app.agent(
    urls=["https://docs.firecrawl.dev", "https://firecrawl.dev/pricing"],
    prompt="Compare the features and pricing information"
)

努力选择

设置代理在任务上花费的推理量:

努力 最适合
low 在一个网站上的简单查询
medium 少数几页上的多步骤任务
high 深度研究,复杂导航,关键数据
result = app.agent(
    prompt="Compare enterprise features across Firecrawl, Apify, and ScrapingBee",
    effort="high"
)

每个努力级别都会运行 spark-2 模型。努力级别改变的是推理预算,而不是模型。

模型选择(旧版)

model 仍然可用,并且继续受到支持。发送 model 或 effort,不要同时发送。如果请求同时包含这两个字段,会返回 400 错误。

模型 成本 最适合
spark-1-mini 便宜 60% 大多数任务
spark-1-pro(默认) 标准 复杂研究,关键数据收集
spark-2 查看 定价 运行 effort 的模型
result = app.agent(
    prompt="Compare enterprise features across Firecrawl, Apify, and ScrapingBee",
    model="spark-1-pro"
)

一个没有 model 且没有 effort 的请求将运行 spark-1-pro。

何时使用 Pro:

  • 对多个网站的数据进行比较
  • 从具有复杂导航或身份验证的网站中提取信息
  • 研究任务中,代理需要探索多条路径
  • 关键数据,对准确性要求极高

在我们的 Agent 文档 中了解更多关于 Spark 模型的信息。

爬取

爬取整个网站并获取所有页面的内容。

curl -X POST 'https://api.firecrawl.dev/v2/crawl' \
  -H 'Authorization: Bearer fc-YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://docs.firecrawl.dev",
    "limit": 100,
    "scrapeOptions": {
      "formats": ["markdown"]
    }
  }'

返回一个作业ID:

{
  "success": true,
  "id": "123-456-789",
  "url": "https://api.firecrawl.dev/v2/crawl/123-456-789"
}

检查爬网状态

curl -X GET 'https://api.firecrawl.dev/v2/crawl/123-456-789' \
  -H 'Authorization: Bearer fc-YOUR_API_KEY'
{
  "status": "completed",
  "total": 50,
  "completed": 50,
  "creditsUsed": 50,
  "data": [
    {
      "markdown": "# Page Title\n\nContent...",
      "metadata": {"title": "Page Title", "sourceURL": "https://..."}
    }
  ]
}

注意: SDKs 会自动处理轮询,以提供更好的开发者体验。

地图

立即发现网站上的所有 URL。

curl -X POST 'https://api.firecrawl.dev/v2/map' \
  -H 'Authorization: Bearer fc-YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"url": "https://firecrawl.dev"}'

回应:

{
  "success": true,
  "links": [
    {"url": "https://firecrawl.dev", "title": "Firecrawl", "description": "Turn websites into LLM-ready data"},
    {"url": "https://firecrawl.dev/pricing", "title": "Pricing", "description": "Firecrawl pricing plans"},
    {"url": "https://firecrawl.dev/blog", "title": "Blog", "description": "Firecrawl blog"}
  ]
}

带搜索的地图

在网站中查找特定网址:

from firecrawl import Firecrawl

app = Firecrawl(api_key="fc-YOUR_API_KEY")

result = app.map("https://firecrawl.dev", search="pricing")
# Returns URLs ordered by relevance to "pricing"

批量抓取

一次抓取多个网址:

from firecrawl import Firecrawl

app = Firecrawl(api_key="fc-YOUR_API_KEY")

job = app.batch_scrape([
    "https://firecrawl.dev",
    "https://docs.firecrawl.dev",
    "https://firecrawl.dev/pricing"
], formats=["markdown"])

for doc in job.data:
    print(doc.metadata.source_url)

SDKs

我们的SDK提供了一种方便的方式来使用所有Firecrawl功能,并自动处理异步操作的轮询。

Python

安装SDK:

pip install firecrawl-py
from firecrawl import Firecrawl

app = Firecrawl(api_key="fc-YOUR_API_KEY")

# Scrape a single URL
doc = app.scrape("https://firecrawl.dev", formats=["markdown"])
print(doc.markdown)

# Use the Agent for autonomous data gathering
result = app.agent(prompt="Find the founders of Stripe")
print(result.data)

# Crawl a website (automatically waits for completion)
docs = app.crawl("https://docs.firecrawl.dev", limit=50)
for doc in docs.data:
    print(doc.metadata.source_url, doc.markdown[:100])

# Search the web
results = app.search("best AI data tools 2024", limit=10)
print(results)

Node.js

安装 SDK:

npm install firecrawl
import { Firecrawl } from 'firecrawl';

const app = new Firecrawl({ apiKey: 'fc-YOUR_API_KEY' });

// Scrape a single URL
const doc = await app.scrape('https://firecrawl.dev', { formats: ['markdown'] });
console.log(doc.markdown);

// Use the Agent for autonomous data gathering
const result = await app.agent({ prompt: 'Find the founders of Stripe' });
console.log(result.data);

// Crawl a website (automatically waits for completion)
const docs = await app.crawl('https://docs.firecrawl.dev', { limit: 50 });
docs.data.forEach(doc => {
    console.log(doc.metadata.sourceURL, doc.markdown.substring(0, 100));
});

// Search the web
const results = await app.search('best AI data tools 2024', { limit: 10 });
results.data.web.forEach(result => {
    console.log(`${result.title}: ${result.url}`);
});

去

Install SDK:

go get github.com/firecrawl/firecrawl/apps/go-sdk
package main

import (
    "context"
    "fmt"
    "log"

    firecrawl "github.com/firecrawl/firecrawl/apps/go-sdk"
    "github.com/firecrawl/firecrawl/apps/go-sdk/option"
)

func main() {
    // Create a client (reads FIRECRAWL_API_KEY from environment)
    client, err := firecrawl.NewClient(option.WithAPIKey("fc-YOUR_API_KEY"))
    if err != nil {
        log.Fatal(err)
    }

    ctx := context.Background()

    // Scrape a single URL
    doc, err := client.Scrape(ctx, "https://firecrawl.dev", &firecrawl.ScrapeOptions{
        Formats: []string{"markdown"},
    })
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(doc.Markdown)

    // Use the Agent for autonomous data gathering
    agent, err := client.Agent(ctx, &firecrawl.AgentOptions{
        Prompt: "Find the founders of Stripe",
    })
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(agent.Data)

    // Crawl a website (automatically waits for completion)
    job, err := client.Crawl(ctx, "https://docs.firecrawl.dev", &firecrawl.CrawlOptions{
        Limit: firecrawl.Int(50),
    })
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("Crawled %d pages\n", len(job.Data))

    // Search the web
    results, err := client.Search(ctx, "best AI data tools 2024", &firecrawl.SearchOptions{
        Limit: firecrawl.Int(10),
    })
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(results)
}

Java

添加依赖项(Gradle/Maven):

repositories {
    mavenCentral()
    maven { url 'https://jitpack.io' }
}

dependencies {
    implementation 'com.github.firecrawl:firecrawl-java-sdk:2.0'
}
import dev.firecrawl.client.FirecrawlClient;
import dev.firecrawl.model.*;

FirecrawlClient client = new FirecrawlClient(
    System.getenv("FIRECRAWL_API_KEY"), null, null
);

// Scrape a single URL
ScrapeParams scrapeParams = new ScrapeParams();
scrapeParams.setFormats(new String[]{"markdown"});
FirecrawlDocument doc = client.scrapeURL("https://firecrawl.dev", scrapeParams);
System.out.println(doc.getMarkdown());

// Use the Agent for autonomous data gathering
AgentParams agentParams = new AgentParams("Find the founders of Stripe");
AgentResponse start = client.createAgent(agentParams);
AgentStatusResponse result = client.getAgentStatus(start.getId());
System.out.println(result.getData());

// Crawl a website (polls until completion)
CrawlParams crawlParams = new CrawlParams();
crawlParams.setLimit(50);
CrawlStatusResponse job = client.crawlURL("https://docs.firecrawl.dev", crawlParams, null, 10);
for (FirecrawlDocument page : job.getData()) {
    System.out.println(page.getMetadata().get("sourceURL"));
}

// Search the web
SearchParams searchParams = new SearchParams("best AI data tools 2024");
searchParams.setLimit(10);
SearchResponse results = client.search(searchParams);
for (SearchResult r : results.getResults()) {
    System.out.println(r.getTitle() + ": " + r.getUrl());
}

灵丹

添加依赖项:

def deps do
  [
    {:firecrawl, "~> 1.0"}
  ]
end
# Scrape a URL
{:ok, response} = Firecrawl.scrape_and_extract_from_url(
  url: "https://firecrawl.dev",
  formats: ["markdown"]
)

# Crawl a website
{:ok, response} = Firecrawl.crawl_urls(
  url: "https://docs.firecrawl.dev",
  limit: 50
)

# Search the web
{:ok, response} = Firecrawl.search_and_scrape(
  query: "best AI data tools 2024",
  limit: 10
)

# Map URLs
{:ok, response} = Firecrawl.map_urls(url: "https://example.com")

生锈

添加依赖项:

[dependencies]
firecrawl = "2"
tokio = { version = "1", features = ["macros", "rt-multi-thread"] }
use firecrawl::{Client, ScrapeOptions, Format, CrawlOptions};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new("fc-YOUR_API_KEY")?;

    // Scrape a URL
    let document = client.scrape("https://firecrawl.dev", None).await?;
    println!("{:?}", document.markdown);

    // Crawl a website
    let options = CrawlOptions {
        limit: Some(50),
        ..Default::default()
    };
    let result = client.crawl("https://docs.firecrawl.dev", options).await?;
    println!("Crawled {} pages", result.data.len());

    // Search the web
    let response = client.search("best web scraping tools 2024", None).await?;
    println!("{:?}", response.data);

    Ok(())
}

红宝石

Install SDK:

gem install firecrawl-sdk
require "firecrawl"

client = Firecrawl::Client.new(api_key: "fc-YOUR_API_KEY")

# Scrape a single URL
doc = client.scrape("https://firecrawl.dev",
  Firecrawl::Models::ScrapeOptions.new(formats: ["markdown"]))
puts doc.markdown

# Use the Agent for autonomous data gathering
result = client.agent(
  Firecrawl::Models::AgentOptions.new(prompt: "Find the founders of Stripe"))
puts result.data

# Crawl a website (automatically waits for completion)
job = client.crawl("https://docs.firecrawl.dev",
  Firecrawl::Models::CrawlOptions.new(limit: 50))
job.data.each { |d| puts d.metadata.source_url }

# Search the web
results = client.search("best AI data tools 2024",
  Firecrawl::Models::SearchOptions.new(limit: 10))
puts results

.NET

安装 SDK:

dotnet add package firecrawl-sdk
using Firecrawl;
using Firecrawl.Models;

var client = new FirecrawlClient("fc-YOUR_API_KEY");

// Scrape a single URL
var doc = await client.ScrapeAsync("https://firecrawl.dev",
    new ScrapeOptions { Formats = new List<object> { "markdown" } });
Console.WriteLine(doc.Markdown);

// Crawl a website (automatically waits for completion)
var job = await client.CrawlAsync("https://docs.firecrawl.dev",
    new CrawlOptions { Limit = 50 });
Console.WriteLine($"Crawled {job.Data.Count} pages");

// Search the web
var results = await client.SearchAsync("best AI data tools 2024",
    new SearchOptions { Limit = 10 });
Console.WriteLine(results);

PHP

安装 SDK:

composer require firecrawl/firecrawl-sdk
<?php

use Firecrawl\Client\FirecrawlClient;
use Firecrawl\Models\ScrapeOptions;
use Firecrawl\Models\CrawlOptions;
use Firecrawl\Models\SearchOptions;

$client = FirecrawlClient::create(apiKey: 'fc-YOUR_API_KEY');

// Scrape a single URL
$doc = $client->scrape('https://firecrawl.dev', ScrapeOptions::with(
    formats: ['markdown'],
));
echo $doc->getMarkdown();

// Crawl a website (automatically waits for completion)
$job = $client->crawl('https://docs.firecrawl.dev', CrawlOptions::with(limit: 50));
foreach ($job->getData() as $page) {
    echo $page->getMetadata()['sourceURL'] . "\n";
}

// Search the web
$results = $client->search('best AI data tools 2024', SearchOptions::with(limit: 10));
print_r($results);

集成

代理与 AI 工具

构建技能(将 Firecrawl 集成到产品代码中)在此仓库的 skills/ 中编写,并通过 CI 同步到目录。贡献技能?CLI 技能(包括研究/开发者索引技能) → 提交 PR 到 firecrawl/cli。构建/SDK 技能 → 提交 PR 到此仓库(skills/)。工作流技能 → 提交 PR 到 firecrawl/firecrawl-workflows。目录(firecrawl/skills)为只读 — 永远不要直接提交 PR。

平台

查看所有集成 →

缺少你喜欢的工具? 打开一个 issue 告诉我们!


资源


开源与云服务

Firecrawl 是在 AGPL-3.0 许可证下开源的。firecrawl.dev 的云版本包含额外的功能:

要在本地运行,请参阅 贡献指南。要自行托管,请参阅 自托管指南。


贡献

我们欢迎贡献!在提交拉取请求之前,请阅读我们的贡献指南。

许可

该项目主要在GNU Affero通用公共许可证v3.0 (AGPL-3.0)下授权。SDK和一些UI组件在MIT许可证下授权。具体目录中的LICENSE文件中查看详情。


终端用户在抓取网站时遵守网站政策是其唯一责任。 建议用户遵守适用的隐私政策和使用条款。默认情况下,Firecrawl 会遵守 robots.txt 指令。使用 Firecrawl 即表示您同意遵守这些条件。

↑ 返回顶部 ↑

本站来源与版权声明
  • 本文标题:firecrawl - The web data API to search
  • 本文链接:https://www.cn121.com/automation/firecrawl-firecrawl.html
  • 原项目:firecrawl/firecrawl 版权归原作者 firecrawl 及贡献者所有
  • 收录信息:本站于 2026-09-21 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
  • 开源协议:收录时本项目采用 AGPL-3.0(查看 LICENSE 原文),本站转载其原始文档(未改动文字,仅剔除图片与无关章节);使用、修改、分发请以该仓库 LICENSE 原文为准。基于本页内容形成的衍生作品, 须同样以该协议发布。
  • 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 firecrawl/firecrawl。
  • 内容说明:本页正文为原项目 README 原文(英文),本站后续会翻译为中文(当前尚未译出),仅剔除了图片与赞助等无关章节、并把相对链接改为绝对地址;页首简介为机器翻译自仓库描述。
  • 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
  • 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。