00:00:00RAG를 위한 스크래퍼가 필요할 때 진짜 문제는 데이터를 가져오는 게 아니라,
00:00:03그 데이터를 정제하는 것입니다.
00:00:04자바스크립트는 오류를 내고, HTML은 지저분하며,
00:00:07LLM이 쓸 수 있게 만드느라 시간을 다 허비하곤 하죠.
00:00:11이 문제의 해결책이 바로 CrawlForAI입니다.
00:00:13AI를 위해 구축되었고 비동기 처리를 지원하며,
00:00:15자바스크립트를 처리해 깔끔한 마크다운이나 JSON으로 출력합니다.
00:00:18게다가 Scrapy 같은 기존 파이썬 스크래퍼보다 최대 6배 더 빠릅니다.
00:00:23모델에 바로 넣을 수 있는 데이터를 전보다 훨씬 빠르게 얻을 수 있죠.
00:00:26어떻게 작동하냐고요? 기존과는 뭐가 다를까요?
00:00:29그 질문들에 답해드리겠습니다.
00:00:30[음악]
00:00:35그럼 CrawlForAI의 정체는 정확히 무엇일까요?
00:00:37언뜻 보면 평범한 파이썬 크롤러 같지만,
00:00:40단순 스크래핑이 아니라 AI를 위해 설계되었습니다.
00:00:43차이점은 이렇습니다.
00:00:44대부분의 크롤러는 원본 HTML을 주지만,
00:00:46CrawlForAI는 LLM이 바로 쓸 수 있는 깔끔한 마크다운이나 구조화된 JSON을 줍니다.
00:00:52Playwright를 사용해 자바스크립트를 처리하고,
00:00:54비동기로 작동해 확장성이 뛰어납니다.
00:00:57또한 링크만 필요할 때 무거운 렌더링을 건너뛰는 프리패치(prefetch) 모드도 있죠.
00:01:01이게 왜 중요하냐면, 챗봇이나 어시스턴트,
00:01:04에이전트를 만들 때 우리의 고민은 크롤링 자체가 아니라,
00:01:08지저분한 웹페이지를 쓸모 있는 데이터로 바꾸는 것이기 때문입니다.
00:01:11CrawlForAI는 이 문제를 빠르고 완벽하게 해결해 줍니다.
00:01:15이런 콘텐츠가 마음에 드신다면 구독 부탁드립니다.
00:01:18관련 영상을 꾸준히 올리고 있거든요.
00:01:20간단한 것부터 시작하죠. 제가 만든 가장 기초적인 크롤링 예시입니다.
00:01:23해당 리포지토리와 문서에서 내용을 가져와서,
00:01:25몇 줄만 수정해서 실행해 보았습니다.
00:01:28AI 파이프라인의 비동기 웹 요청을 처리하는 AsyncWebCrawler를 임포트했습니다.
00:01:34그런 다음 테크 뉴스 URL을 넣고 실행했습니다. 그게 끝이에요.
00:01:38이제 출력 결과를 보세요.
00:01:40원시 HTML 데이터가 아니라,
00:01:43깔끔한 마크다운과 JSON 데이터가 나옵니다.
00:01:45헤드라인 구조와 링크가 유지되어 있고,
00:01:47내부적으로는 페이지를 가져와서,
00:01:50DOM을 분석하고 노이즈를 제거합니다.
00:01:52콘텐츠의 순위를 매겨서 불필요한 용어 없이 중요한 내용만 남겨주죠.
00:01:57뉴스 요약기나 RAG 프로토타입을 만들어야 할 때,
00:02:02데이터 정제 스크립트를 따로 짤 필요 없이,
00:02:04이 결과를 바로 모델에 넘기면 됩니다.
00:02:07여느 도구처럼 일반적인 스크래핑을 예상했지만,
00:02:11실제로는 이미 완벽하게 준비된 데이터를 얻었습니다.
00:02:14그만큼 시간이 절약되는 셈이죠.
00:02:17자, 이제부터 훨씬 더 흥미로워집니다.
00:02:19직접 써보면서 알게 된 건데,
00:02:20모든 페이지를 다 렌더링할 필요는 없더라고요. 이걸 한번 보세요.
00:02:23방금 전과 같은 크롤러지만,
00:02:25이번에는 prefetch를 true로 설정했습니다.
00:02:27해커 뉴스(Hacker News) 사이트로 시도해 보죠.
00:02:30얼마나 빨리 돌아가는지 보이시나요?
00:02:31정말 말도 안 되게 빠릅니다.
00:02:33모든 페이지를 하나하나 렌더링하는 대신,
00:02:35비동기 방식으로 링크부터 먼저 긁어옵니다.
00:02:37수집기(aggregator)를 만든다면 아주 유용하겠죠.
00:02:38먼저 필요한 것을 찾은 다음에,
00:02:39나중에 내용을 추출하면 되니까요.
00:02:42모든 걸 다 크롤링할 필요 없이,
00:02:44딱 필요한 것만 하면 됩니다.
00:02:45수백, 수천 개의 URL을 다룰 때 이 차이는 어마어마합니다.
00:02:47이제 프로덕션 환경 측면의 이야기를 해보죠.
00:02:48BFS 딥 크롤 전략을 사용해 깊이 있는 크롤링을 실행해 보겠습니다.
00:02:50이게 그들이 구현한 BFS 방식입니다.
00:02:52그다음 여기에 resume state(재개 상태)를 정의하고,
00:02:55상태 변경 콜백 함수를 추가합니다.
00:02:58크롤링을 시작하고 나서,
00:03:01프로세스를 강제로 종료해 보겠습니다.
00:03:03보통 대부분의 도구는 프로세스를 죽이면,
00:03:07처음부터 다시 시작해야 하죠.
00:03:08하지만 이걸 다시 실행하면 어떻게 되는지 보세요.
00:03:10저장된 JSON 상태를 사용해 재시작하고,
00:03:13손실 없이 중단된 지점부터 정확히 이어서 진행합니다.
00:03:14대규모 RAG 지식 베이스를 구축할 때,
00:03:16서버 다운은 짜증 나는 일이 아니라,
00:03:19비용의 문제입니다.
00:03:22하지만 이건 바로 복구가 가능하죠.
00:03:24자, 이제 다른 스크래퍼가 못 하는 '시맨틱 추출'에 대해 말해봅시다.
00:03:26Pydantic을 사용해 스키마를 정의해 보죠.
00:03:29직함, 회사, 급여 같은 필드들 말이죠.
00:03:30인디드(Indeed) 사이트를 긁어볼 겁니다.
00:03:35그런 다음 LLM 추출 전략 클래스를 구성하고,
00:03:37지시 사항과 모델 제공자를 설정합니다.
00:03:39채용 공고 사이트인 인디드에서 실행해 보면,
00:03:40이 결과물을 보세요.
00:03:44정말 훌륭하지 않나요?
00:03:46깔끔한 필드로 구성된 구조화된 JSON입니다.
00:03:48내부적으로는 이런 일이 일어납니다.
00:03:49CrawlForAI가 페이지를 앞서 말한 대로
00:03:51마크다운이나 JSON으로 변환합니다.
00:03:52그다음 이걸 모델로 보냅니다.
00:03:54모델은 여러분의 스키마에 따라 구조를 잡죠.
00:03:56텍스트를 그냥 긁는 게 아니라,
00:03:58원하는 정보를 '추출'하는 겁니다.
00:04:01이제 LLM이 이 데이터를 완벽히 다룰 수 있습니다.
00:04:03이건 LLM 기반 도구들 중에서도 완전히 차원이 다른 기능입니다.
00:04:06정말 멋지죠? 이제 전체적으로 정리해 보겠습니다.
00:04:07장점은 일단 빠릅니다.
00:04:09벤치마크상 최대 6배까지 정말 빠르죠.
00:04:11자바스크립트도 자동으로 처리해 주고요.
00:04:15비동기 방식이라 확장성이 좋고,
00:04:16충돌 후 재개 기능도 있습니다.
00:04:18하지만 가장 핵심적인 특징은,
00:04:20LLM을 직접 통합한다는 점입니다.
00:04:22게다가 오픈 소스죠.
00:04:24pip install 하나면 바로 시작할 수 있습니다.
00:04:26물론 모든 도구가 그렇듯,
00:04:28트레이드오프(trade-off)도 있습니다.
00:04:29우선 파이썬 전용입니다.
00:04:32파이썬을 안 쓰시는 분들께는,
00:04:33단점이 될 수도 있겠네요.
00:04:35LLM 기능은 Ollama 같은 로컬 모델을 쓰지 않는 한 API 키가 필요합니다.
00:04:36크롤링 속도가 빨라도 레이트 리밋(rate limit)은 걸릴 수 있고,
00:04:38빠르게 변하는 오픈 소스 프로젝트인 만큼,
00:04:39꾸준히 업데이트를 확인해야 합니다.
00:04:41업데이트가 계속 올라오고 있거든요.
00:04:42하지만 AI 중심 개발자들에게는,
00:04:46많은 고충을 해결해 주는 도구임이 틀림없습니다.
00:04:49특히 RAG 파이프라인에서 말이죠.
00:04:51이제 여러분이 이미 쓰고 계실 다른 도구들과 비교해 보죠.
00:04:53파이썬 유저라면 익숙한 Scrapy가 있습니다.
00:04:54대규모 정적 크롤링에는 아주 좋지만,
00:04:56규칙 기반이라 설정 코드가 너무 많습니다.
00:04:58솔직히 초기 설정에 시간이 꽤 걸리죠.
00:05:00마크다운 출력이나 LLM 추출 기능을 넣으려면,
00:05:03직접 커스텀 레이어를 만들어야 합니다.
00:05:05하지만 CrawlForAI는 그게 이미 내장되어 있죠.
00:05:07Beautiful Soup도 있습니다.
00:05:10매우 가볍지만, 너무 단순합니다.
00:05:13엄밀히 말하면 이건 그냥 파서(parser)일 뿐이죠.
00:05:16자체 크롤링 엔진도 없고,
00:05:17자바스크립트 렌더링도 안 됩니다.
00:05:19결국 이것저것 직접 기워 붙여야 할 겁니다.
00:05:21그리고 유명한 Selenium이 있죠.
00:05:23자바스크립트 렌더링은 잘해줍니다.
00:05:25하지만 느리고 수동 설정이 많습니다.
00:05:26비동기 워크플로우로 확장하는 것도 골치 아픈 일이죠.
00:05:28CrawlForAI는 내부적으로 Playwright를 감싸고 있으며,
00:05:31명확한 비동기 API를 제공합니다.
00:05:33만약 정적 데이터를 위한
00:05:36전통적인 규칙 기반 크롤러를 만든다면,
00:05:38기존 도구들로도 충분히 괜찮을 겁니다.
00:05:42하지만 AI 시스템이나,
00:05:44RAG 파이프라인, 자율 에이전트를 만든다면,
00:05:46CrawlForAI는 바로 그런 세상을 위해 만들어진 도구입니다.
00:05:48정말 멋진 AI 도구인 셈이죠.
00:05:49단순히 페이지를 긁는 게 아니라 데이터를 준비해 줍니다.
00:05:52LLM이 필요로 하는 형태로 말이죠.
00:05:54지금까지 CrawlForAI에 대해 알아보았습니다.
00:05:56AI에 관심이 있다면 꼭 확인해 볼 가치가 있습니다.
00:06:00속도가 너무 빨라서 저도 정말 놀랐거든요.
00:06:02그리고 이런
00:06:04RAG 스타일의 파이프라인을 구축할 때,
00:06:06데이터를 LLM에 아주 깔끔하게 밀어 넣어줍니다.
00:06:08그럼 다음 영상에서 뵙겠습니다.
00:06:11정말 속도가 빨라서 저도 깜짝 놀랐을 정도예요.
00:06:14그리고 이건 정말 멋진 기능인데,
00:06:15이런 RAG 스타일의 파이프라인을 구축할 때,
00:06:17데이터를 우리 LLM에 아주 깔끔하게 밀어 넣어줄 수 있습니다.
00:06:20그럼 다음 영상에서 뵙겠습니다.