Firecrawl V1 来了!我们引入了更可靠且对开发者友好的 API。

以下是新增功能:

  • /scrape 的输出格式。选择您希望输出的格式。
  • 新的 /map 端点 用于获取网页的大部分 URL。
  • /crawl/{id} 状态的开发者友好 API。
  • 所有计划的速率限制提高了一倍。
  • Go SDKRust SDK
  • 团队支持
  • 仪表板中的 API 密钥管理。
  • onlyMainContent 现在默认为 true
  • /crawl webhook 和 websocket 支持。

抓取格式

您可以选择所需的输出格式。您可以指定多个输出格式。支持的格式有:

  • Markdown (markdown)
  • HTML (html)
  • 原始 HTML (rawHtml)(无修改)
  • 截图 (screenshot 或 screenshot@fullPage)
  • 链接 (links)
  • 提取 (extract) - 结构化输出

输出键将匹配您选择的格式。

from firecrawl import FirecrawlApp

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

# 抓取一个网站:
scrape_result = app.scrape_url('firecrawl.dev', params={'formats': ['markdown', 'html']})
print(scrape_result)

响应

SDK 将直接返回数据对象。cURL 将如下所示精确返回有效负载。

{
  "success": true,
  "data" : {
    "markdown": "Launch Week I来了![查看我们的第二天发布🚀](https://www.firecrawl.dev/blog/launch-week-i-day-2-doubled-rate-limits)[💥免费获得两个月...",
    "html": "<!DOCTYPE html><html lang=\"zh\" class=\"light\" style=\"color-scheme: light;\"><body class=\"__variable_36bd41 __variable_d7dc5d font-inter ...",
    "metadata": {
      "title": "首页 - Firecrawl",
      "description": "Firecrawl抓取并将任何网站转换为干净的Markdown。",
      "language": "zh",
      "keywords": "Firecrawl,Markdown,Data,Mendable,Langchain",
      "robots": "follow, index",
      "ogTitle": "Firecrawl",
      "ogDescription": "将任何网站转换为LLM就绪数据。",
      "ogUrl": "https://www.firecrawl.dev/",
      "ogImage": "https://www.firecrawl.dev/og.png?123",
      "ogLocaleAlternate": [],
      "ogSiteName": "Firecrawl",
      "sourceURL": "https://firecrawl.dev",
      "statusCode": 200
    }
  }
}

介绍 /map(Alpha)

从单个 URL 到整个网站的映射的最简单方法。

使用方式

from firecrawl import FirecrawlApp

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

# 映射一个网站:
map_result = app.map_url('https://firecrawl.dev')
print(map_result)

响应

SDK 将直接返回数据对象。cURL 将如下所示精确返回有效负载。

{
  "status": "success",
  "links": [
    "https://firecrawl.dev",
    "https://www.firecrawl.dev/pricing",
    "https://www.firecrawl.dev/blog",
    "https://www.firecrawl.dev/playground",
    "https://www.firecrawl.dev/smart-crawl",
    ...
  ]
}

WebSockets

要使用 WebSockets 抓取网站,请使用“抓取 URL 并监视”方法。

# 在一个异步函数中...
nest_asyncio.apply()

# 定义事件处理程序
def on_document(detail):
    print("DOC", detail)

def on_error(detail):
    print("ERR", detail['error'])

def on_done(detail):
    print("DONE", detail['status'])

# 启动爬取和监视过程的函数
async def start_crawl_and_watch():
    # 初始化爬取任务并获取监视器
    watcher = app.crawl_url_and_watch('firecrawl.dev', { 'excludePaths': ['blog/*'], 'limit': 5 })

    # 添加事件监听器
    watcher.add_event_listener("document", on_document)
    watcher.add_event_listener("error", on_error)
    watcher.add_event_listener("done", on_done)

    # 启动监视器
    await watcher.connect()

# 运行事件循环
await start_crawl_and_watch()

提取格式

LLM 提取现在在 v1 中以 extract 格式提供。要从页面中提取结构化数据,您可以传递一个模式到端点,或者只提供一个提示。

from firecrawl import FirecrawlApp
from pydantic import BaseModel, Field

# 使用你的API密钥初始化FirecrawlApp
app = FirecrawlApp(api_key='your_api_key')

class ExtractSchema(BaseModel):
    company_mission: str
    supports_sso: bool
    is_open_source: bool
    is_in_yc: bool

data = app.scrape_url('https://docs.firecrawl.dev/', {
    'formats': ['json'],
    'jsonOptions': {
        'schema': ExtractSchema.model_json_schema(),
    }
})
print(data["json"])

输出:

JSON
{
    "success": true,
    "data": {
      "json": {
        "company_mission": "训练一个安全的人工智能,利用您的技术资源回答客户和员工的问题,这样您的团队就不必这样做了",
        "supports_sso": true,
        "is_open_source": false,
        "is_in_yc": true
      },
      "metadata": {
        "title": "Mendable",
        "description": "Mendable让您轻松构建AI聊天应用。摄取、定制,然后只需一行代码即可在您想要的任何地方部署。由SideGuide提供支持",
        "robots": "follow, index",
        "ogTitle": "Mendable",
        "ogDescription": "Mendable让您轻松构建AI聊天应用。摄取、定制,然后只需一行代码即可在您想要的任何地方部署。由SideGuide提供支持",
        "ogUrl": "https://docs.firecrawl.dev/",
        "ogImage": "https://docs.firecrawl.dev/mendable_new_og1.png",
        "ogLocaleAlternate": [],
        "ogSiteName": "Mendable",
        "sourceURL": "https://docs.firecrawl.dev/"
      },
    }
}

无模式提取(新增)```md

现在,您可以通过仅向端点传递一个prompt来提取数据而无需模式。llm将选择数据的结构。

curl -X POST https://api.firecrawl.dev/v1/scrape \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer YOUR_API_KEY' \
    -d '{
      "url": "https://docs.firecrawl.dev/",
      "formats": ["json"],
      "jsonOptions": {
        "prompt": "从页面中提取公司使命。"
      }
    }'

输出:

JSON
{
    "success": true,
    "data": {
      "json": {
        "company_mission": "训练一个安全的人工智能,使用您的技术资源回答客户和员工的问题,以便您的团队不必这样做",
      },
      "metadata": {
        "title": "Mendable",
        "description": "Mendable 允许您轻松构建 AI 聊天应用程序。摄取、自定义,然后只需一行代码即可在您想要的任何位置部署。由 SideGuide 提供支持",
        "robots": "follow, index",
        "ogTitle": "Mendable",
        "ogDescription": "Mendable 允许您轻松构建 AI 聊天应用程序。摄取、自定义,然后只需一行代码即可在您想要的任何位置部署。由 SideGuide 提供支持",
        "ogUrl": "https://docs.firecrawl.dev/",
        "ogImage": "https://docs.firecrawl.dev/mendable_new_og1.png",
        "ogLocaleAlternate": [],
        "ogSiteName": "Mendable",
        "sourceURL": "https://docs.firecrawl.dev/"
      },
    }
}

新的爬虫Webhook

现在,您可以向/crawl端点传递一个webhook参数。这将在开始、更新和完成爬取时向您指定的URL发送POST请求。

现在,每次爬取页面都会触发webhook,而不仅仅是在最后返回整个结果时。

cURL
curl -X POST https://api.firecrawl.dev/v1/crawl \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer YOUR_API_KEY' \
    -d '{
      "url": "https://docs.firecrawl.dev",
      "limit": 100,
      "webhook": "https://example.com/webhook"
    }'

Webhook事件

现在有4种类型的事件:

  • crawl.started - 当爬虫开始时触发。
  • crawl.page - 为每个爬取的页面触发。
  • crawl.completed - 当爬虫完成时触发,以通知您它已经完成。
  • crawl.failed - 当爬虫失败时触发。

Webhook响应

  • success - 如果webhook成功爬取了页面。
  • type - 发生的事件类型。
  • id - 爬虫的ID。
  • data - 抓取的数据(数组)。这只有在crawl.page事件中才会非空,如果页面成功抓取则包含1个项目。响应与/scrape端点的相同。
  • error - 如果webhook失败,这将包含错误信息。

从V0迁移

⚠️ 弃用通知:V0端点将在2025年4月1日弃用。请在此之前迁移到V1端点以确保服务不中断。

/scrape端点

更新后的/scrape端点已重新设计,以提高可靠性和易用性。新的/scrape请求体结构如下:

{
  "url": "<string>",
  "formats": ["markdown", "html", "rawHtml", "links", "screenshot", "json"],
  "includeTags": ["<string>"],
  "excludeTags": ["<string>"],
  "headers": { "<key>": "<value>" },
  "waitFor": 123,
  "timeout": 123
}

格式

现在,您可以选择希望输出的格式。您可以指定多个输出格式。支持的格式包括:

  • Markdown (markdown)
  • HTML (html)
  • Raw HTML (rawHtml)(无修改)
  • 截图 (screenshot或screenshot@fullPage)
  • 链接 (links)
  • JSON (json)

默认情况下,输出将仅包括Markdown格式。

新请求体的详细信息

下表概述了V1中/scrape端点请求体参数的变化。

参数变化描述
onlyIncludeTags移动并重命名移至根级别。并重命名为includeTags
removeTags移动并重命名移至根级别。并重命名为excludeTags
onlyMainContent移动移至根级别。默认值为true
waitFor移动移至根级别。
headers移动移至根级别。
parsePDF移动移至根级别。
extractorOptions无变化
timeout无变化
pageOptions移除不需要pageOptions参数。抓取选项已移至根级别。
replaceAllPathsWithAbsolutePaths移除replaceAllPathsWithAbsolutePaths不再需要。所有路径现在都默认为绝对路径。
includeHtml移除添加"html"formats中。
includeRawHtml移除添加"rawHtml"formats中。
screenshot移除添加"screenshot"formats中。
fullPageScreenshot移除添加"screenshot@fullPage"formats中。
extractorOptions移除使用"extract"格式并带有extract对象。
```新的 extract 格式在 llm-extract 部分中有所描述。

/crawl 端点

我们还更新了 V1 版本的 /crawl 端点。请查看下面改进的请求体:

{
  "url": "<string>",
  "excludePaths": ["<string>"],
  "includePaths": ["<string>"],
  "maxDepth": 2,
  "ignoreSitemap": true,
  "limit": 10,
  "allowBackwardLinks": true,
  "allowExternalLinks": true,
  "scrapeOptions": {
    // 与 /scrape 相同的选项
    "formats": ["markdown", "html", "rawHtml", "screenshot", "links"],
    "headers": { "<key>": "<value>" },
    "includeTags": ["<string>"],
    "excludeTags": ["<string>"],
    "onlyMainContent": true,
    "waitFor": 123
  }
}

关于新请求体的详细信息

下表概述了 V1 版本 /crawl 端点的请求体参数变化。

参数变更描述
pageOptions重命名重命名为 scrapeOptions
includes移动并重命名移动到根级别。重命名为 includePaths
excludes移动并重命名移动到根级别。重命名为 excludePaths
allowBackwardCrawling移动并重命名移动到根级别。重命名为 allowBackwardLinks
allowExternalLinks移动移动到根级别。
maxDepth移动移动到根级别。
ignoreSitemap移动移动到根级别。
limit移动移动到根级别。
crawlerOptions移除不需要 crawlerOptions 参数。抓取选项已经移动到根级别。
timeout移除使用 scrapeOptions 中的 timeout 代替。