1个不稳定版本

0.1.0 2024年8月15日

#1631Web编程

Download history • Rust 包仓库 96/week @ 2024-08-12 • Rust 包仓库

96 每月下载量

GPL-2.0-or-later

23KB
255

Firecrawl Rust SDK

Firecrawl Rust SDK是一个库,它允许您轻松抓取和爬取网站,并将数据输出为与语言模型(LLM)一起使用的格式。它提供了与Firecrawl API交互的简单直观的界面。

安装

要安装Firecrawl Rust SDK,将以下内容添加到您的 Cargo.toml

[dependencies]
firecrawl = "^0.1"
tokio = { version = "^1", features = ["full"] }
serde = { version = "^1.0", features = ["derive"] }
serde_json = "^1.0"
uuid = { version = "^1.10", features = ["v4"] }

[build-dependencies]
tokio = { version = "1", features = ["full"] }

将其添加到您的代码库中。

用法

  1. firecrawl.dev 获取API密钥
  2. 将API密钥设置为名为 FIRECRAWL_API_KEY 的环境变量,或将其作为参数传递给 FirecrawlApp 结构体。

以下是如何在 example.rs 中使用SDK的示例:所有以下示例都可以从以下内容开始

use firecrawl::FirecrawlApp;

#[tokio::main]
async fn main() {
    // Initialize the FirecrawlApp with the API key
    let api_key = ...;
    let api_url = ...;
    let app = FirecrawlApp::new(api_key, api_url).expect("Failed to initialize FirecrawlApp");

    // your code here...
}

抓取URL

要抓取单个URL,请使用 scrape_url 方法。它接受URL作为参数,并返回抓取数据作为 serde_json::Value

// Example scrape code...
let scrape_result = app.scrape_url("https://example.com", None).await;
match scrape_result {
    Ok(data) => println!("Scrape Result:\n{}", data["markdown"]),
    Err(e) => eprintln!("Scrape failed: {}", e),
}

从URL中提取结构化数据

通过LLM提取,您可以从任何URL轻松提取结构化数据。我们支持Serde进行JSON模式验证,使其对您来说更容易。以下是您如何使用它的示例

let json_schema = json!({
    "type": "object",
    "properties": {
        "top": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "title": {"type": "string"},
                    "points": {"type": "number"},
                    "by": {"type": "string"},
                    "commentsURL": {"type": "string"}
                },
                "required": ["title", "points", "by", "commentsURL"]
            },
            "minItems": 5,
            "maxItems": 5,
            "description": "Top 5 stories on Hacker News"
        }
    },
    "required": ["top"]
});

let llm_extraction_params = json!({
    "extractorOptions": {
        "extractionSchema": json_schema,
        "mode": "llm-extraction"
    },
    "pageOptions": {
        "onlyMainContent": true
    }
});

// Example scrape code...
let llm_extraction_result = app
    .scrape_url("https://news.ycombinator.com", Some(llm_extraction_params))
    .await;
match llm_extraction_result {
    Ok(data) => println!("LLM Extraction Result:\n{}", data["llm_extraction"]),
    Err(e) => eprintln!("LLM Extraction failed: {}", e),
}

搜索查询

用于在网络上搜索,获取最相关的结果,抓取每一页,并返回Markdown。

// Example query search code...
let query = "what is mendable?";
let search_result = app.search(query).await;
match search_result {
    Ok(data) => println!("Search Result:\n{}", data),
    Err(e) => eprintln!("Search failed: {}", e),
}

爬取网站

要爬取网站,请使用 crawl_url 方法。它接受起始URL和可选参数作为参数。参数允许您指定爬取作业的附加选项,例如要爬取的最大页数、允许的域和输出格式。

wait_until_done 参数确定方法是否在返回结果之前等待爬取作业完成。如果设置为 true,则方法将定期检查爬取作业的状态,直到完成或达到指定的 timeout(以秒为单位)。如果设置为 false,则方法将立即返回作业ID,您可以使用 check_crawl_status 方法手动检查爬取作业的状态。

let random_uuid = String::from(Uuid::new_v4());
let idempotency_key = Some(random_uuid); // optional idempotency key
let crawl_params = json!({
    "crawlerOptions": {
        "excludes": ["blog/*"]
    }
});

// Example crawl code...
let crawl_result = app
    .crawl_url("https://example.com", Some(crawl_params), true, 2, idempotency_key)
    .await;
match crawl_result {
    Ok(data) => println!("Crawl Result:\n{}", data),
    Err(e) => eprintln!("Crawl failed: {}", e),
}

如果将 wait_until_done 设置为 true,则 crawl_url 方法将在作业完成后返回爬取结果。如果作业失败或被停止,将引发异常。

检查爬取状态

要检查爬取作业的状态,请使用 check_crawl_status 方法。它接受作业 ID 作为参数,并返回爬取作业的当前状态。

let job_id = crawl_result["jobId"].as_str().expect("Job ID not found");
let status = app.check_crawl_status(job_id).await;
match status {
    Ok(data) => println!("Crawl Status:\n{}", data),
    Err(e) => eprintln!("Failed to check crawl status: {}", e),
}

错误处理

SDK 处理 Firecrawl API 返回的错误,并引发适当的异常。如果在请求过程中发生错误,将引发一个包含描述性错误消息的异常。

使用 Cargo 运行测试

为确保 Firecrawl Rust SDK 的功能,我们已包含使用 cargo 的端到端测试。这些测试涵盖了 SDK 的各个方面,包括 URL 抓取、网络搜索和网站爬取。

运行测试

要运行测试,请执行以下命令

$ export $(xargs < ./tests/.env)
$ cargo test --test e2e_with_auth

贡献

欢迎为 Firecrawl Rust SDK 贡献!如果您发现任何问题或有改进建议,请在 GitHub 仓库上打开一个问题或提交一个 pull request。

许可

Firecrawl Rust SDK 是开源的,并按照 AGPL 许可证 发布。

依赖

~6–18MB
~254K SLoC