스킬.잇다
Part 3 · Ch 5 패턴 약 8분 분량 v1 · 2026-04-11

웹 크롤링 스킬 구조 입문 (비개발자 버전)

코드 없이도 이해할 수 있는 웹 크롤링 스킬의 기본 구조 — URL 목록, 본문 추출, 중복 제거, 수집 에티켓

한 줄 요약

웹 크롤링 스킬은 "정해진 URL 목록 → 본문 구조화 추출 → 요약·분류 → 아카이브" 네 단계로 구성됩니다. 외부 서버에 수집 에티켓을 지키고(robots, rate limit), 저장한 결과를 시간 태그로 관리하면 됩니다.

4단계 기본 구조

flowchart LR
  U["1 · URL 목록
  sources.yaml"] --> E["2 · 본문 추출
  web-reader"]
  E --> P["3 · 정리·요약
  LLM"]
  P --> A["4 · 아카이브
  YYYY-MM-DD/"]

1단계 — URL 목록을 관리한다

크롤링 대상은 코드가 아닌 설정 파일에 둡니다. 대부분 YAML 이 편합니다.

# sources.yaml
sources:
  - name: 매일경제 금융
    url: https://www.mk.co.kr/news/economy/
    category: finance
  - name: 한국은행 환율
    url: https://www.bok.or.kr/.../exchangeRate
    category: macro
  - name: 국세청 고시
    url: https://nts.go.kr/tax-law/notice
    category: legal

왜 설정으로 분리? 크롤링 대상이 늘거나 바뀔 때 스킬 코드를 수정하지 않아도 됩니다. 비개발자도 YAML은 편집 가능. 같은 스킬을 "경쟁사 모니터링" 으로 전환하려면 sources.yaml만 바꾸면 됩니다.

2단계 — 본문 추출

각 URL 을 열어 본문·제목·발행일·대표 이미지 를 구조화해 꺼냅니다. 직접 구현하지 말고 기존 web-reader 스킬을 쓰세요.

web-reader 호출
  입력: sources.yaml 의 URL N개
  출력: [{ title, body, published_at, image, url } × N ]

왜 직접 안 짜나? HTML 구조는 사이트마다 다르고 자주 바뀝니다. 매번 깨지는 코드를 유지보수하는 건 비개발자에겐 재앙. web-reader는 이 일만 전담하는 스킬이라 사이트가 바뀌어도 한 곳만 수정하면 됩니다.

3단계 — 정리와 요약

LLM(Sonnet 기본)에게 정해진 양식으로 요약시킵니다.

## 출력 형식
- 제목
- 발행일 · 출처
- 3줄 요약 (첫 줄 = 결론)
- 핵심 수치 (있으면)
- 원문 링크

포인트: 양식이 고정되어야 재활용·비교·검색이 됩니다. "잘 요약해줘" 는 금지.

4단계 — 아카이브

결과를 날짜 태그가 있는 폴더에 저장합니다.

shelf/
  2026-04-11/
    mk__korea-economy-today.md
    bok__usd-krw-2026-04-11.md
    nts__notice-20260411-0001.md
  2026-04-10/
    ...
  index.md   ← 최근 7일치 링크 모음

왜 폴더 구조? (a) 어제 것과 오늘 것을 쉽게 비교, (b) 중복 탐지, (c) "지난주 이슈 요약" 같은 2차 스킬이 선반을 읽어 재가공.

수집 에티켓 — 상대 서버와의 기본 매너

1. robots.txt 확인

대부분 사이트는 도메인/robots.txt 에 "이 봇은 어디까지 수집해도 된다"를 적어둡니다. disallow 된 경로는 건드리지 않습니다. web-reader 는 자동으로 체크합니다.

2. Rate limit

같은 도메인에 1초에 1~2회 이상 요청하지 않기. 많은 사이트가 공격으로 인지해 IP를 차단합니다.

# sources.yaml 에티켓 설정
politeness:
  per_domain_delay_ms: 1500
  max_concurrent: 3

3. User-Agent 명시

누가 크롤링하는지 정직하게 밝힙니다. Mozilla/5.0 만 쓰는 건 매너가 아닙니다.

User-Agent: IGM-Research-Bot/1.0 (+https://example.com/bot-info)

4. 유료·로그인 콘텐츠는 건드리지 않기

회원제 기사, 페이월 뒤 콘텐츠는 수집 대상 아님. 법적·윤리적 문제가 발생합니다.

5. 대량 수집은 공식 API가 있으면 그쪽으로

네이버 뉴스·카카오 등은 공식 API 를 제공합니다. 크롤링보다 API 가 안정적이고 합법적입니다.

중복 제거 — 신규 공지만 걸러내기

매일 크롤링하면 어제와 같은 기사가 계속 나옵니다. 이를 제거하는 간단한 방법:

  1. URL 해시 저장 — 각 기사의 URL을 이미 수집했으면 건너뜀
  2. 제목 유사도 — URL 이 다르지만 제목이 거의 같으면 동일 기사로 판정
  3. 발행일 필터published_at > 어제 만 선정

가장 단순한 형태는 URL 해시 만으로도 충분합니다. Track B 일일 브리핑 수준에서는 그 이상이 필요 없습니다.

자주 묻는 질문

Q. 사이트가 자바스크립트로 렌더링되면?

A. 정적 HTML 만 보는 단순한 크롤러는 빈 페이지를 가져옵니다. web-reader필요시 headless browser 모드로 전환해 JS 렌더링 후 본문을 꺼냅니다. 설정 한 줄만 바꾸면 됩니다.

Q. 로그인이 필요한 페이지는 어떻게?

A. 쿠키 주입 방식을 권장합니다. 내 브라우저에서 로그인한 쿠키를 web-reader 에 전달해 같은 세션으로 접근. 단 이 방법은 내 계정으로 본인 자료를 볼 때만 쓰는 것이 원칙입니다. 공유 계정·비인가 접근에는 쓰지 마세요.

Q. 네이버 뉴스는 크롤링하지 말고 API를 쓰라고 들었어요.

A. 맞습니다. 네이버는 공식 뉴스 검색 API 와 오픈 API 를 제공합니다. 크롤링보다 이쪽이 안정적이고 rate limit 도 명시되어 있습니다. etf-naver 스킬이 이 API 를 씁니다.

Q. 수집한 기사의 저작권은 어떻게?

A. 내부 리서치용 요약은 인용 범위로 간주되는 경우가 많지만, 외부 배포·재판매는 저작권 위반 가능성이 높습니다. 교육·내부 회의 자료로만 쓰고, 외부 공유 시 원문 링크만 노출하고 요약은 자체 표현으로 다시 쓰세요.

다음 읽을거리

변경 이력

  • v1 (2026-04-11): 최초 작성 — Claude@IGM Cohort 1 교재용