Firecrawl 将网页转换为 Markdown,非常适合用于 LLM 应用。
  • 代劳繁杂环节:代理、缓存、速率限制、被 JS 屏蔽的内容
  • 处理动态内容:动态网站、JS 渲染页面、PDF、图片
  • 输出整洁的 Markdown、结构化数据、截图或 HTML。
详情参见 Scrape 端点 API 参考

使用 Firecrawl 抓取 URL

/scrape 端点

用于抓取指定 URL 并获取其内容。

安装

# 使用 pip 安装 firecrawl-py

from firecrawl import Firecrawl

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

使用方式

from firecrawl import Firecrawl

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

# Scrape a website:
doc = firecrawl.scrape("https://firecrawl.dev", formats=["markdown", "html"])
print(doc)
有关参数的更多信息,请参阅 API 参考

响应

各 SDK 会直接返回数据对象。cURL 将按下方所示原样返回载荷。
{
  "success": true,
  "data" : {
    "markdown": "Launch Week I is here! [See our Day 2 Release 🚀](https://www.firecrawl.dev/blog/launch-week-i-day-2-doubled-rate-limits)[💥 Get 2 months free...",
    "html": "<!DOCTYPE html><html lang=\"en\" class=\"light\" style=\"color-scheme: light;\"><body class=\"__variable_36bd41 __variable_d7dc5d font-inter ...",
    "metadata": {
      "title": "Home - Firecrawl",
      "description": "Firecrawl crawls and converts any website into clean markdown.",
      "language": "en",
      "keywords": "Firecrawl,Markdown,Data,Mendable,Langchain",
      "robots": "follow, index",
      "ogTitle": "Firecrawl",
      "ogDescription": "Turn any website into LLM-ready data.",
      "ogUrl": "https://www.firecrawl.dev/",
      "ogImage": "https://www.firecrawl.dev/og.png?123",
      "ogLocaleAlternate": [],
      "ogSiteName": "Firecrawl",
      "sourceURL": "https://firecrawl.dev",
      "statusCode": 200
    }
  }
}

抓取 formats

你现在可以选择所需的输出 formats。你可以指定多个输出 formats。支持的 formats 包括:
  • Markdown (markdown)
  • Summary (summary)
  • HTML (html)
  • 原始 HTML(rawHtml,不做任何修改)
  • 截图(screenshot,可用选项包括 fullPagequalityviewport
  • 链接(links
  • JSON(json)— 结构化输出
输出的键将与所选的 formats 对应。

提取结构化数据

/scrape(使用 JSON)端点

用于从抓取的页面中提取结构化数据。
from firecrawl import Firecrawl
from pydantic import BaseModel
app = Firecrawl(api_key="fc-YOUR-API-KEY")

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

result = app.scrape(
    'https://firecrawl.dev',
    formats=[{
      "type": "json",
      "schema": JsonSchema
    }],
    only_main_content=False,
    timeout=120000
)

print(result)
输出:
JSON
{
    "success": true,
    "data": {
      "json": {
        "company_mission": "AI-powered web scraping and data extraction",
        "supports_sso": true,
        "is_open_source": true,
        "is_in_yc": true
      },
      "metadata": {
        "title": "Firecrawl",
        "description": "AI-powered web scraping and data extraction",
        "robots": "follow, index",
        "ogTitle": "Firecrawl",
        "ogDescription": "AI-powered web scraping and data extraction",
        "ogUrl": "https://firecrawl.dev/",
        "ogImage": "https://firecrawl.dev/og.png",
        "ogLocaleAlternate": [],
        "ogSiteName": "Firecrawl",
        "sourceURL": "https://firecrawl.dev/"
      },
    }
}

无需 schema 的提取

现在,你只需向端点传入一个 prompt,即可在不提供 schema 的情况下进行提取。LLM 会自行决定数据结构。
from firecrawl import Firecrawl

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

result = app.scrape(
    'https://firecrawl.dev',
    formats=[{
      "type": "json",
      "prompt": "Extract the company mission from the page."
    }],
    only_main_content=False,
    timeout=120000
)

print(result)
输出:
JSON
{
    "success": true,
    "data": {
      "json": {
        "company_mission": "AI-powered web scraping and data extraction",
      },
      "metadata": {
        "title": "Firecrawl",
        "description": "AI-powered web scraping and data extraction",
        "robots": "follow, index",
        "ogTitle": "Firecrawl",
        "ogDescription": "AI-powered web scraping and data extraction",
        "ogUrl": "https://firecrawl.dev/",
        "ogImage": "https://firecrawl.dev/og.png",
        "ogLocaleAlternate": [],
        "ogSiteName": "Firecrawl",
        "sourceURL": "https://firecrawl.dev/"
      },
    }
}

JSON 格式选项

使用 json 格式时,在 formats 中传入一个对象,包含以下参数:
  • schema:用于结构化输出的 JSON Schema。
  • prompt:可选提示;在提供 schema 时或仅需轻量指引时用于辅助抽取。

使用 actions 与页面交互

Firecrawl 允许你在抓取页面内容之前对网页执行各种 actions。这对于与动态内容交互、在页面之间导航,或访问需要用户操作的内容特别有用。 下面是一个示例,演示如何使用 actions 访问 google.com,搜索 Firecrawl,点击第一个结果,并截取页面截图。 在执行其他 actions 之前或之后,几乎都应使用 wait action,为页面加载预留足够时间。

示例

from firecrawl import Firecrawl

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

doc = firecrawl.scrape('https://example.com/login', {
  formats=['markdown'],
  actions=[
    { type: 'write', text: 'john@example.com' },
    { type: 'press', key: 'Tab' },
    { type: 'write', text: 'secret' },
    { type: 'click', selector: 'button[type="submit"]' },
    { type: 'wait', milliseconds: 1500 },
    { type: 'screenshot', fullPage: true },
  ],
});

print(doc.markdown, doc.screenshot);

输出

{
  "success": true,
  "data": {
    "markdown": "Our first Launch Week is over! [See the recap 🚀](blog/firecrawl-launch-week-1-recap)...",
    "actions": {
      "screenshots": [
        "https://alttmdsdujxrfnakrkyi.supabase.co/storage/v1/object/public/media/screenshot-75ef2d87-31e0-4349-a478-fb432a29e241.png"
      ],
      "scrapes": [
        {
          "url": "https://www.firecrawl.dev/",
          "html": "<html><body><h1>Firecrawl</h1></body></html>"
        }
      ]
    },
    "metadata": {
      "title": "Home - Firecrawl",
      "description": "Firecrawl crawls and converts any website into clean markdown.",
      "language": "en",
      "keywords": "Firecrawl,Markdown,Data,Mendable,Langchain",
      "robots": "follow, index",
      "ogTitle": "Firecrawl",
      "ogDescription": "Turn any website into LLM-ready data.",
      "ogUrl": "https://www.firecrawl.dev/",
      "ogImage": "https://www.firecrawl.dev/og.png?123",
      "ogLocaleAlternate": [],
      "ogSiteName": "Firecrawl",
      "sourceURL": "http://google.com",
      "statusCode": 200
    }
  }
}
有关 actions 参数的更多信息,请参见 API 参考

位置与语言

指定国家/地区和首选语言,以根据你的目标位置和语言偏好获取相关内容。

工作原理

当你指定位置设置时,Firecrawl 会在可用时使用合适的代理,并仿真相应的语言和时区设置。默认情况下,若未指定位置,位置将设为“US”。

用法

要使用位置和语言设置,请在请求体中包含 location 对象,并提供以下属性:
  • country:ISO 3166-1 alpha-2 国家/地区代码(例如“US”“AU”“DE”“JP”)。默认值为“US”。
  • languages:按优先级排序的首选语言和区域设置数组。默认使用所设位置对应的语言。
from firecrawl import Firecrawl

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

doc = firecrawl.scrape('https://example.com',
    formats=['markdown'],
    location={
        'country': 'US',
        'languages': ['en']
    }
)

print(doc)
有关受支持位置的更多详情,请参阅代理文档

缓存与 maxAge(缓存)

为加快请求速度,当有较新的副本可用时,Firecrawl 默认会直接从缓存返回结果。
  • 默认新鲜度窗口maxAge = 172800000 毫秒(2 天)。如果缓存页面仍在该窗口内,将立即返回;否则会重新抓取页面并写入缓存。
  • 性能:在数据对时效性要求不高时,抓取速度可提升至最多 5 倍。
  • 始终获取最新:将 maxAge 设为 0
  • 避免存储:如果不希望 Firecrawl 为本次请求缓存/存储结果,将 storeInCache 设为 false
示例(强制获取最新内容):
from firecrawl import Firecrawl
firecrawl = Firecrawl(api_key='fc-YOUR_API_KEY')

doc = firecrawl.scrape(url='https://example.com', maxAge=0, formats=['markdown'])
print(doc)
示例(使用 10 分钟缓存窗口):
from firecrawl import Firecrawl
firecrawl = Firecrawl(api_key='fc-YOUR_API_KEY')

doc = firecrawl.scrape(url='https://example.com', maxAge=600000, formats=['markdown', 'html'])
print(doc)

批量抓取多个 URL

你现在可以同时批量抓取多个 URL。它以起始 URL 和可选参数作为输入。params 参数允许你为批量抓取任务指定其他选项,例如输出 formats。

工作原理

它与 /crawl 端点的运行方式非常相似。它会提交一个批量抓取作业,并返回一个作业 ID,用于检查该批量抓取的状态。 SDK 提供两种方式:同步与异步。同步方式会直接返回批量抓取作业的结果,异步方式则会返回一个作业 ID,供您用于查询批量抓取的状态。

使用方法

from firecrawl import Firecrawl

firecrawl = Firecrawl(api_key="fc-你的 API 密钥")

job = firecrawl.batch_scrape([
    "https://firecrawl.dev",
    "https://docs.firecrawl.dev",
], formats=["markdown"], poll_interval=2, wait_timeout=120)

print(job)

Response

如果你使用 SDK 的同步方法,将直接返回批量抓取任务的结果;否则会返回一个作业 ID,你可以用它来查询批量抓取的状态。

同步执行

已完成
{
  "status": "completed",
  "total": 36,
  "completed": 36,
  "creditsUsed": 36,
  "expiresAt": "2024-00-00T00:00:00.000Z",
  "next": "https://api.firecrawl.dev/v2/batch/scrape/123-456-789?skip=26",
  "data": [
    {
      "markdown": "[Firecrawl 文档首页![浅色标志](https://mintlify.s3-us-west-1.amazonaws.com/firecrawl/logo/light.svg)!...",
      "html": "<!DOCTYPE html><html lang=\"en\" class=\"js-focus-visible lg:[--scroll-mt:9.5rem]\" data-js-focus-visible=\"\">...",
      "metadata": {
        "title": "使用 Groq Llama 3 构建“网站对话”功能 | Firecrawl",
        "language": "en",
        "sourceURL": "https://docs.firecrawl.dev/learn/rag-llama3",
        "description": "了解如何使用 Firecrawl、Groq Llama 3 和 LangChain 构建“与你的网站对话”的机器人。",
        "ogLocaleAlternate": [],
        "statusCode": 200
      }
    },
    ...
  ]
}

异步

你可以使用作业 ID 调用 /batch/scrape/{id} 端点来查看批量抓取的状态。该端点应在作业仍在运行期间或刚完成后使用,因为批量抓取作业会在 24 小时后过期
{
  "success": true,
  "id": "123-456-789",
  "url": "https://api.firecrawl.dev/v2/batch/scrape/123-456-789"
}

隐身模式

针对具有高级反机器人防护的网站,Firecrawl 提供隐身代理模式,可在抓取复杂站点时显著提升成功率。 了解更多:隐身模式