要安装 Firecrawl Rust SDK,请在您的 Cargo.toml
中添加以下内容:
# 将以下内容添加到您的Cargo.toml中
[dependencies]
firecrawl = "^1.0"
tokio = { version = "^1", features = ["full"] }
首先,您需要从 firecrawl.dev 获取一个 API 密钥。然后,您需要初始化 FirecrawlApp
。从这里,您可以访问像 FirecrawlApp::scrape_url
这样的函数,让您使用我们的 API。
以下是如何在 Rust 中使用 SDK 的示例:
use firecrawl::{crawl::{CrawlOptions, CrawlScrapeOptions, CrawlScrapeFormats}, FirecrawlApp, scrape::{ScrapeOptions, ScrapeFormats}};
#[tokio::main]
async fn main() {
// 使用API密钥初始化FirecrawlApp
let app = FirecrawlApp::new("fc-YOUR_API_KEY").expect("无法初始化FirecrawlApp");
// 抓取一个URL
let options = ScrapeOptions {
formats: vec![ScrapeFormats::Markdown, ScrapeFormats::HTML].into(),
..Default::default()
};
let scrape_result = app.scrape_url("https://firecrawl.dev", options).await;
match scrape_result {
Ok(data) => println!("抓取结果:
{}", data.markdown.unwrap()),
Err(e) => eprintln!("抓取失败: {}", e),
}
// 爬取一个网站
let crawl_options = CrawlOptions {
scrape_options: CrawlScrapeOptions {
formats: vec![CrawlScrapeFormats::Markdown, CrawlScrapeFormats::HTML].into(),
..Default::default()
}.into(),
limit: 100.into(),
..Default::default()
};
let crawl_result = app
.crawl_url("https://mendable.ai", crawl_options)
.await;
match crawl_result {
Ok(data) => println!("爬取结果(使用了{}积分):
{:#?}", data.credits_used, data.data),
Err(e) => eprintln!("爬取失败: {}", e),
}
}
抓取 URL
要抓取单个 URL,请使用 scrape_url
方法。它接受 URL 作为参数并返回抓取的数据作为 Document
。
let options = ScrapeOptions {
formats: vec![ScrapeFormats::Markdown, ScrapeFormats::HTML].into(),
..Default::default()
};
let scrape_result = app.scrape_url("https://firecrawl.dev", options).await;
match scrape_result {
Ok(data) => println!("Scrape Result:
{}", data.markdown.unwrap()),
Err(e) => eprintln!("Map failed: {}", e),
}
带提取的抓取
使用 Extract,您可以轻松地从任何 URL 中提取结构化数据。您需要使用 JSON Schema 格式指定您的模式,使用 serde_json::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_options = ScrapeOptions {
formats: vec![ ScrapeFormats::Extract ].into(),
extract: ExtractOptions {
schema: json_schema.into(),
..Default::default()
}.into(),
..Default::default()
};
let llm_extraction_result = app
.scrape_url("https://news.ycombinator.com", llm_extraction_options)
.await;
match llm_extraction_result {
Ok(data) => println!("LLM Extraction Result: \n{:#?}", data.extract.unwrap()),
Err(e) => eprintln!("LLM Extraction failed: {}", e),
}
抓取网站
要抓取网站,请使用 crawl_url
方法。这将等待抓取完成,这可能需要很长时间,具体取决于您的起始 URL 和您的选项。
let crawl_options = CrawlOptions {
scrape_options: CrawlScrapeOptions {
formats: vec![CrawlScrapeFormats::Markdown, CrawlScrapeFormats::HTML].into(),
..Default::default()
}.into(),
limit: 100.into(),
..Default::default()
};
let crawl_result = app
.crawl_url("https://mendable.ai", crawl_options)
.await;
match crawl_result {
Ok(data) => println!("Crawl Result (used {} credits):
{:#?}", data.credits_used, data.data),
Err(e) => eprintln!("Crawl failed: {}", e),
}
异步抓取
要抓取而不等待结果,请使用 crawl_url_async
方法。它接受相同的参数,但它返回一个 CrawlAsyncRespone
结构体,包含抓取的 ID。您可以使用该 ID 与 check_crawl_status
方法随时检查状态。请注意,完成的抓取将在 24 小时后删除。
let crawl_id = app.crawl_url_async("https://mendable.ai", None).await?.id;
// ... later ...
let status = app.check_crawl_status(crawl_id).await?;
if status.status == CrawlStatusTypes::Completed {
println!("Crawl is done: {:#?}", status.data);
} else {
// ... wait some more ...
}
映射 URL
映射从一个起始 URL 关联的所有链接。
let map_result = app.map_url("https://firecrawl.dev", None).await;
match map_result {
Ok(data) => println!("映射的URL: {:#?}", data),
Err(e) => eprintln!("映射失败: {}", e),
}
错误处理
SDK 处理由 Firecrawl API 和我们的依赖项返回的错误,并将它们组合到 FirecrawlError
枚举中,实现 Error
、Debug
和 Display
。我们的所有方法都返回一个 Result<T, FirecrawlError>
。