跳转到主要内容

前置条件

  • Rust 1.70+,并已安装 Cargo
  • 一个 Firecrawl API 密钥——免费获取

安装 crate

firecrawl 添加到 Cargo.toml 中:
[dependencies]
firecrawl = "1"
tokio = { version = "1", features = ["full"] }
serde_json = "1"
reqwest = { version = "0.12", features = ["json"] }

进行网页搜索

use firecrawl::v2::Client;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new("fc-YOUR-API-KEY")?;
    let results = client.search("firecrawl web scraping", None).await?;

    for result in &results {
        println!("{} - {}", result.title.as_deref().unwrap_or(""), result.url.as_deref().unwrap_or(""));
    }
    Ok(())
}

抓取网页

let doc = client.scrape("https://example.com", None).await?;
println!("{}", doc.markdown.unwrap_or_default());
{
  "markdown": "# Example Domain\n\nThis domain is for use in illustrative examples...",
  "metadata": {
    "title": "Example Domain",
    "sourceURL": "https://example.com"
  }
}

与页面交互

交互 API 通过 HTTP 接收基于 prompt 的命令。先抓取页面以获取 scrapeId,然后发送 prompt 来控制浏览器会话:
use reqwest::Client as HttpClient;
use serde_json::json;

let api_key = "fc-YOUR-API-KEY";
let http = HttpClient::new();

// 1. 抓取页面以开启浏览器会话
let scrape_res: serde_json::Value = http
    .post("https://api.firecrawl.dev/v2/scrape")
    .bearer_auth(api_key)
    .json(&json!({ "url": "https://www.amazon.com", "formats": ["markdown"] }))
    .send().await?
    .json().await?;

let scrape_id = scrape_res["data"]["metadata"]["scrapeId"]
    .as_str().unwrap();

// 2. 发送 prompt 进行交互
http.post(format!("https://api.firecrawl.dev/v2/scrape/{scrape_id}/interact"))
    .bearer_auth(api_key)
    .json(&json!({ "prompt": "Search for iPhone 16 Pro Max" }))
    .send().await?;

let interact_res: serde_json::Value = http
    .post(format!("https://api.firecrawl.dev/v2/scrape/{scrape_id}/interact"))
    .bearer_auth(api_key)
    .json(&json!({ "prompt": "Click on the first result and tell me the price" }))
    .send().await?
    .json().await?;

println!("{}", interact_res);

// 3. 关闭会话
http.delete(format!("https://api.firecrawl.dev/v2/scrape/{scrape_id}/interact"))
    .bearer_auth(api_key)
    .send().await?;

环境变量

设置 FIRECRAWL_API_KEY,不要直接传入 API 密钥:
export FIRECRAWL_API_KEY=fc-YOUR-API-KEY
firecrawl crate 也通过 FirecrawlApp 支持 v1 API。完整的 API 说明请参见 Rust SDK 文档

后续步骤

Search 文档

进行网页搜索并获取完整页面内容

抓取 文档

包含所有 抓取 选项,包括 formats、actions 和代理

交互文档

点击、填写表单并提取动态内容

Rust SDK 参考

完整的 SDK 参考,包含爬取、map 等功能