rs-trafilatura를 Firecrawl와 함께 사용하는 방법
I’m happy to translate the article for you, but I’ll need the full text you’d like translated. Could you please paste the content (excluding the source line you already provided) here? Once I have the article text, I’ll translate it into Korean while preserving the formatting, markdown, and code blocks as requested.
Introduction
Firecrawl은 웹 페이지 스크래핑을 위한 API 서비스입니다. JavaScript 렌더링, 안티‑봇 우회, 그리고 속도 제한을 처리해 주며—URL을 보내면 페이지 내용을 반환합니다. 기본적으로 Firecrawl은 Markdown을 반환하지만, 원시 HTML을 요청하면 rs‑trafilatura를 사용해 페이지 유형을 인식하는 추출과 품질 점수를 얻을 수 있습니다. 이는 구조화된 메타데이터(제목, 저자, 날짜, 페이지 유형)가 필요하거나 추출 결과에 대한 신뢰도를 알고 싶을 때 유용합니다.
Installation
pip install rs-trafilatura firecrawl
또한 Firecrawl API 키가 필요합니다.
Basic Usage
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 구조화 데이터를 대체합니다. |
| 포럼 | 전체 페이지를 콘텐츠로 처리합니다. | 사용자 게시물을 식별하고 투표 컨트롤, 사용자 프로필 패널 및 관리 UI를 제외합니다. |
| 서비스 페이지 | 다중 섹션 레이아웃을 과다 추출하거나 부족하게 추출할 수 있습니다. | 다중 후보 병합이 히어로, 기능, 추천사 및 가격 섹션을 처리합니다. |
품질 점수
Firecrawl은 신뢰도 메트릭을 제공하지 않습니다. rs‑trafilatura는 extraction_quality 필드(0.0 – 1.0)를 추가하여 신뢰할 수 없는 추출을 표시할 수 있게 합니다.
마크다운 출력 비교
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})")
Note: 배치 API는
.data속성을 가진 결과 객체를 반환하며, 이 속성에는 Document 객체 목록이 포함됩니다.extract_firecrawl_result어댑터는 Document 객체(v4)와 레거시 dict(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)
Result Fields
extract_firecrawl_result는 다음 속성을 가진 ExtractResult를 반환합니다:
title,author,date— 구조화된 메타데이터main_content— 정제된 추출 텍스트content_markdown— GFM 마크다운 (활성화된 경우)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: