如何将 rs-trafilatura 与 Firecrawl 一起使用
Source: Dev.to
请提供您希望翻译的正文内容(除代码块和 URL 之外),我将把它翻译成简体中文并保持原有的格式。谢谢!
介绍
Firecrawl 是一个用于抓取网页的 API 服务。它能够处理 JavaScript 渲染、反机器人拦截以及速率限制——你只需提供 URL,它就会返回页面内容。默认情况下,Firecrawl 返回 Markdown,但如果你请求原始 HTML,则可以对其运行 rs‑trafilatura,进行基于页面类型的提取并进行质量评分。这在你需要结构化元数据(标题、作者、日期、页面类型)或想了解提取可信度时非常有用。
安装
pip install rs-trafilatura firecrawl您还需要从获取 Firecrawl API 密钥。
基本用法
from firecrawl import FirecrawlApp
from rs_trafilatura.firecrawl import extract_firecrawl_result
app = FirecrawlApp(api_key="fc-your-api-key")
# Request HTML format (required for rs-trafilatura)
result = app.scrape("https://example.com/blog/post", formats=["html"])
# Extract with rs-trafilatura
extracted = extract_firecrawl_result(result)
print(f"Title: {extracted.title}")
print(f"Author: {extracted.author}")
print(f"Date: {extracted.date}")
print(f"Page type: {extracted.page_type}")
print(f"Quality: {extracted.extraction_quality:.2f}")
print(f"Content: {extracted.main_content[:200]}")关键是 formats=["html"] —— 这告诉 Firecrawl 返回原始 HTML 以及其他任何格式。如果不加这个参数,你只能得到 Markdown,而 rs‑trafilatura 将没有可提取的内容。
页面类型差异
| 页面类型 | Firecrawl 输出 | rs‑trafilatura 优势 |
|---|---|---|
| 产品页面 | 可能包含导航、筛选和“相关产品”栏目。 | 识别页面类型,仅提取产品描述,必要时回退到 JSON‑LD 结构化数据。 |
| 论坛 | 将整页视为内容。 | 识别用户帖子,排除投票控件、用户资料面板和管理界面。 |
| 服务页面 | 可能对多段布局提取过多或不足。 | 多候选合并处理主视觉、功能、推荐语和定价等栏目。 |
质量评分
Firecrawl 不提供置信度指标。rs‑trafilatura 添加了一个 extraction_quality 字段(0.0 – 1.0),以便您标记不可靠的提取。
比较 Markdown 输出
result = app.scrape("https://example.com", formats=["html", "markdown"])
# Firecrawl's own Markdown
firecrawl_markdown = result.markdown
# rs‑trafilatura extraction
extracted = extract_firecrawl_result(result, output_markdown=True)
rs_markdown = extracted.content_markdown
rs_quality = extracted.extraction_quality
print(f"Firecrawl markdown: {len(firecrawl_markdown)} chars")
print(f"rs‑trafilatura markdown: {len(rs_markdown)} chars")
print(f"Extraction quality: {rs_quality:.2f}")批量抓取
Firecrawl 支持批量抓取。将其与 rs‑trafilatura 结合使用,可实现大规模结构化提取:
from firecrawl import FirecrawlApp
from rs_trafilatura.firecrawl import extract_firecrawl_result
app = FirecrawlApp(api_key="fc-your-api-key")
urls = [
"https://example.com/products/widget",
"https://example.com/docs/getting-started",
"https://example.com/blog/announcement",
"https://forum.example.com/thread/help",
]
batch = app.batch_scrape(urls, formats=["html"])
for doc in batch.data:
extracted = extract_firecrawl_result(doc)
print(f"[{extracted.page_type}] {extracted.title} (quality: {extracted.extraction_quality:.2f})")注意: 批量 API 返回的结果对象包含一个
.data属性,其中是 Document 对象的列表。extract_firecrawl_result适配器能够处理 Document 对象(v4)和旧版字典(v1)。
提取选项
# Stricter filtering — less noise
extracted = extract_firecrawl_result(result, favor_precision=True)
# More inclusive — captures more content
extracted = extract_firecrawl_result(result, favor_recall=True)
# Get Markdown output
extracted = extract_firecrawl_result(result, output_markdown=True)结果字段
extract_firecrawl_result 返回一个 ExtractResult,其具有以下属性:
title、author、date— 结构化元数据main_content— 干净的提取文本content_markdown— GFM Markdown(启用时)page_type—article、forum、product、collection、listing、documentation、serviceextraction_quality— 0.0 – 1.0 置信度分数language、sitename、description— 附加元数据images— 包含src、alt、caption的提取图像数据
资源
- rs‑trafilatura (Python):
- rs‑trafilatura (Rust crate):
- Firecrawl:
- Benchmark: