피드로 돌아가기
Dev.toBackend
원문 읽기
How I Built a Soccer Coach Contact Extractor for Messy Athletics Websites
TypeScript 기반 추출 엔진이 휴리스틱-LLM-Firecrawl 3단계 파이프라인으로 체육 웹사이트의 코치 연락처 추출 정확도를 40%에서 90% 이상으로 개선
AI 요약
Context
2017~2018년 휴리스틱만 사용한 버전은 약 40% 정확도에 머물렀으며, 웹사이트마다 다른 연락처 저장 방식(메일링크, Cloudflare 보호, 별도 프로필 페이지, JavaScript 렌더링)으로 인해 단일 추출 방식으로는 확장성이 없었다.
Technical Solution
- 3가지 추출 엔진 병렬 운영: 휴리스틱(정적 사이트의 패턴 기반), LLM(OpenRouter 경유), Firecrawl(JavaScript 렌더링 페이지)
- 휴리스틱 레이어에서 mailto 링크, Cloudflare 이메일 복호화, 데이터 속성, 역문자 난독화, 일반 텍스트 등 8가지 패턴을 순차 검사
- 2단계 추출 파이프라인: 로스터 페이지에서 이름과 직함 추출 후 프로필 URL을 따라가 이메일과 전화번호를 별도 추출
- SPA 탐지로 React/Vue/Angular 셸 페이지 명시적 실패 처리
- 숨겨진 콘텐츠 필터링으로 다른 스포츠나 모바일 레이아웃 제거
- TLS 클라이언트 핑거프린팅 사용으로 합성 클라이언트 차단 우회
- Google Sheets와 Apify 워크플로우 지원으로 스프레드시트 기반 운영 가능화
Impact
- 휴리스틱만 사용한 이전 버전: 약 40% 정확도
- 현재 3단계 파이프라인: 90% 이상 정확도
Key Takeaway
비정형 데이터 추출에서 단일 방식(규칙 또는 LLM만)보다는 저비용 휴리스틱으로 명백한 패턴을 처리하고, 모호한 경우에만 LLM을 사용하며, 불완전한 첫 시도는 추가 요청으로 보충하는 계층화된 파이프라인이 실용적인 정확도 달성의 핵심이다.
실천 포인트
웹 스크래핑이 필요한 프로젝트에서 다양한 페이지 구조를 마주할 때, 휴리스틱-LLM-전문 추출기(Firecrawl 같은)의 3단계 라우팅 파이프라인을 설계하면 비용 효율성(휴리스틱은 무료)과 정확도(LLM은 모호한 케이스에만 사용)를 동시에 달성할 수 있으며, 첫 추출 후 추가 URL을 따라가 미결 필드를 채우는 다단계 패스를 추가하면 정확도를 10~15% 포인트 더 향상할 수 있다.