如何使用 rs‑trafilatura 与 crawl4ai

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

Source: Dev.to

请提供您希望翻译的完整文本内容(除代码块和 URL 之外),我将为您翻译成简体中文并保持原有的 Markdown 格式。谢谢!

安装

pip install rs-trafilatura crawl4ai

如果这是您第一次使用 crawl4ai,请同时安装 Playwright 浏览器:

python -m playwright install chromium

使用 RsTrafilaturaStrategy 的基本示例

import json
import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig
from rs_trafilatura.crawl4ai import RsTrafilaturaStrategy

async def main():
    strategy = RsTrafilaturaStrategy()
    config = CrawlerRunConfig(extraction_strategy=strategy)

    async with AsyncWebCrawler() as crawler:
        result = await crawler.arun(url="https://example.com", config=config)

    data = json.loads(result.extracted_content)
    item = data[0]

    print(f"Title: {item['title']}")
    print(f"Page type: {item['page_type']}")
    print(f"Quality: {item['extraction_quality']}")
    print(f"Content: {item['main_content'][:200]}")

asyncio.run(main())

extracted_content 字段是一个包含单个条目的 JSON 数组,里面存放了解析结果。Crawl4ai 会自动对其进行序列化;你只需要使用 json.loads() 将其解析即可。

Extraction result fields

FieldDescription
title页面标题
author作者姓名(如果检测到)
date发布日期(ISO 8601)
main_content清理后的正文文本
content_markdownMarkdown 输出(如果已启用)
page_typearticle(文章),forum(论坛),product(产品),collection(合集),listing(列表),documentation(文档),service(服务)
extraction_quality0.0 – 1.0 置信度分数
language检测到的语言
sitename网站名称
description元描述

获取 Markdown 与纯文本

strategy = RsTrafilaturaStrategy(output_markdown=True)
config = CrawlerRunConfig(extraction_strategy=strategy)

async with AsyncWebCrawler() as crawler:
    result = await crawler.arun(url="https://example.com", config=config)

data = json.loads(result.extracted_content)
markdown = data[0]["content_markdown"]

Markdown 为 GitHub 风格,保留标题、列表、表格、粗体/斜体、代码块和链接。

调整精确度与召回率

  • 更严格的过滤(噪声更少,可能会漏掉一些内容):

    strategy = RsTrafilaturaStrategy(favor_precision=True)
  • 更宽松的过滤(捕获更多内容,可能会包含模板文本):

    strategy = RsTrafilaturaStrategy(favor_recall=True)

并发示例

async def main():
    strategy = RsTrafilaturaStrategy(output_markdown=True)
    config = CrawlerRunConfig(extraction_strategy=strategy)

    urls = [
        "https://example.com/blog/post-1",
        "https://example.com/products/widget",
        "https://example.com/docs/getting-started",
        "https://forum.example.com/thread/123",
    ]

    async with AsyncWebCrawler() as crawler:
        for url in urls:
            result = await crawler.arun(url=url, config=config)
            data = json.loads(result.extracted_content)
            item = data[0]
            print(f"[{item['page_type']}] {item['title']} (quality: {item['extraction_quality']:.2f})")

asyncio.run(main())

每个页面都使用相应的配置文件进行分类和提取(产品页面使用 JSON‑LD 回退,论坛帖子将评论视为内容,文档页面会移除侧边栏)。提取在每个页面的单独线程中运行,因此不会阻塞异步爬取循环。

混合管道与 LLM 回退

from crawl4ai.extraction_strategy import LLMExtractionStrategy

async def extract_with_fallback(crawler, url, config):
    result = await crawler.arun(url=url, config=config)
    data = json.loads(result.extracted_content)
    item = data[0]

    if item["extraction_quality"]

Resources

  • rs‑trafilatura 源代码:
  • Rust crate:
  • crawl4ai 仓库:
  • WCEB 基准:
  • 基准数据(Zenodo): (替换为实际 DOI)
0 浏览
Back to Blog

相关文章

阅读更多 »