티스토리 뷰

Coding Study/Scraping

firecrawl 사용방법

Rogers_ 2025. 4. 2. 16:53

Firecrawl은 웹사이트에서 데이터를 추출하고 이를 AI 모델(특히 대규모 언어 모델, LLM)에 바로 사용할 수 있는 형태로 변환해주는 강력한 웹 스크래핑 도구이다. 간단히 말해, 웹 데이터를 "크롤링"하고 "스크랩"해서 깔끔한 마크다운(Markdown)이나 구조화된 데이터(JSON 등)로 바꿔주는 서비스이다.

Firecrawl이란?

Firecrawl은 Mendable.ai 팀이 개발한 오픈소스 기반의 API 서비스로, 개발자나 데이터 분석가들이 웹에서 데이터를 쉽게 수집할 수 있도록 설계되었다. 복잡한 설정 없이 URL 하나만 주면 해당 웹사이트와 그 하위 페이지를 자동으로 탐색해서 데이터를 가져온다. 특히 LLM에 최적화된 출력(예: 마크다운, 구조화된 데이터)을 제공한다는 점이 큰 특징이다.

주요 기능

  1. 스크랩(Scrape)
    • 단일 URL에서 데이터를 추출.
    • HTML, 마크다운, 스크린샷, JSON 등 다양한 형식으로 출력 가능.
    • 예: "https://example.com"을 주면 그 페이지의 주요 콘텐츠를 깔끔하게 가져옴.
  2. 크롤(Crawl)
    • 웹사이트 전체를 재귀적으로 탐색해서 모든 접근 가능한 하위 페이지의 데이터를 수집.
    • 사이트맵이 없어도 링크를 따라가며 데이터를 모음.
    • 예: "https://firecrawl.dev"를 크롤링하면 홈페이지부터 블로그, 가격 페이지 등 모든 데이터를 가져올 수 있음.
  3. 데이터 정리
    • 광고, 헤더, 푸터 같은 불필요한 요소를 제거하고 주요 콘텐츠만 추출
    • JavaScript로 렌더링된 동적 콘텐츠도 처리 가능
  4. LLM 친화적 출력
    • AI 모델이 바로 사용할 수 있도록 마크다운이나 구조화된 데이터로 변환
    • 예: "제품 특징을 추출해줘" 같은 요청에 맞춰 JSON으로 깔끔하게 정리
  5. 추가 기능
    • 맵(Map): 웹사이트의 모든 URL 목록을 빠르게 제공.
    • 추출(Extract): AI를 활용해 특정 데이터를 구조화된 형태로 뽑아냄(예: 이름, 이메일, 가격 등)

어떻게 작동하나요?

1. 준비 단계

(1) API 키 발급
  • Firecrawl 웹사이트(firecrawl.dev)에 가서 계정을 만들고 로그인.
  • 대시보드에서 API 키를 발급받아요. 무료 플랜으로 시작하면 500 크레딧이 제공됩니다.
  • API 키는 fc-로 시작하는 긴 문자열이에요(예: fc-YOUR_API_KEY).
(2) 환경 설정
  • 프로젝트 디렉토리에 .env 파일을 만들어 API키를 환경 변수로 설정
FIRECRAWL_API_KEY='fc-YOUR-KEY-HERE'
  • 필요하면 SDK를 설치(아래에서 설명).

2. 사용 방법

Firecrawl은 주로 두 가지 작업(스크랩과 크롤)을 지원한다.

(1) 단일 URL 스크랩 (Scrape)

  • 특정 페이지의 데이터를 추출하는 방법
  • Python 예시
from firecrawl import FirecrawlApp
from dotenv import load_dotenv
import os

# .env 파일에서 환경 변수 로드
load_dotenv()
api_key = os.getenv("FIRECRAWL_API_KEY")

# .env에서 API 키로 FirecrawlApp 초기화
app = FirecrawlApp(api_key)

# 스크래핑할 URL 정의
url = "https://www.firecrawl.dev"

# 웹사이트 스크래핑
response = app.scrape_url(url)

# 응답 출력
print(response["markdown"])
  • 설치: pip install firecrawl-py
  • 결과: 웹사이트의 주요 콘텐츠가 마크다운으로 반환됨

(2) 웹사이트 전체 크롤 (Crawl)

  • 사이트의 모든 페이지를 재귀적으로 탐색해서 데이터를 수집
  • Python 예시
from firecrawl import FirecrawlApp
from dotenv import load_dotenv
import os

# .env 파일 로드 
load_dotenv()

# 환경 변수 가져오기
api_key = os.getenv("FIRECRAWL_API_KEY")

# .env에서 API 키로 FirecrawlApp 초기화
app = FirecrawlApp(api_key)

# 크롤링 시작
crawl_result = app.crawl_url(
    "https://www.firecrawl.dev/",
    params={
        "limit": 10,  # 최대 10개 페이지 크롤링
        "scrapeOptions": {"formats": ["markdown"]}  # 마크다운 형식으로
    }
)

# 결과 출력
print(crawl_result)
  • 크롤링은 비동기 작업이라 결과가 완료될 때까지 기다려야 할 수 있음

(3) 옵션 커스터 마이징

scrapeOptions 또는 rawlerOptions 로 세부 설정 가능

  • onlyMainContent: true: 광고, 내비게이션 제외하고 본문만 추출
  • formats: ["markdown", "html"]: 원하는 출력 형식 지정
  • excludePaths: ["/blog/*"]: 특정 경로 제외
  • 예: Python에서 본문만 추출
  • result = app.scrape_url("https://firecrawl.dev", {"onlyMainContent": True})

3. 결과 활용

  • 출력 형식
    • markdown: 텍스트 콘텐츠(LLM에 바로 주입 가능).
    • html: 원본 HTML.
    • metadata: 제목, 링크, 언어 등 추가 정보.
  • 활용 예
    • 파일로 저장: with open("output.md", "w") as f: f.write(result["markdown"])
    • AI 모델에 주입: 직접 LLM에 전달해서 요약, 분석 등 요청.
    • 데이터베이스 저장: JSON 결과를 MongoDB나 SQLite에 삽입.

4. 주의사항

  • 크레딧 관리: 무료 플랜은 500 크레딧, 스크랩 1회당 1크레딧, 크롤링은 페이지 수에 따라 소모.
  • 속도: 대량 크롤링은 시간이 걸릴 수 있으니 limit으로 조정.

결론

스크래핑과 크롤링 둘다 마크다운 형식으로 터미널에 출력되나, 원하는 데이터를 추출하는 데는 추가 데이터 작업이 필요하다. 다음은 MCP 통해 웹 데이터를 수집하고 방법을 통해 유용한지 확인해 봐야 겠다.