如何将 rs-trafilatura 与 Firecrawl 一起使用

发布: (2026年4月3日 GMT+8 22:22)
4 分钟阅读
原文: Dev.to

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,其具有以下属性:

  • titleauthordate — 结构化元数据
  • main_content — 干净的提取文本
  • content_markdown — GFM Markdown(启用时)
  • page_typearticleforumproductcollectionlistingdocumentationservice
  • extraction_quality — 0.0 – 1.0 置信度分数
  • languagesitenamedescription — 附加元数据
  • images — 包含 srcaltcaption 的提取图像数据

资源

  • rs‑trafilatura (Python):
  • rs‑trafilatura (Rust crate):
  • Firecrawl:
  • Benchmark:
0 浏览
Back to Blog

相关文章

阅读更多 »

如何使用 rs‑trafilatura 与 crawl4ai

crawl4ai 是一个异步网页爬虫,旨在生成对 LLM 友好的输出。默认情况下,它使用自己的 scraping pipeline 将页面转换为 Markdown,但你可以……