如何使用 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
| Field | Description |
|---|---|
title | 页面标题 |
author | 作者姓名(如果检测到) |
date | 发布日期(ISO 8601) |
main_content | 清理后的正文文本 |
content_markdown | Markdown 输出(如果已启用) |
page_type | article(文章),forum(论坛),product(产品),collection(合集),listing(列表),documentation(文档),service(服务) |
extraction_quality | 0.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)