crawlee

Web Scraping & CrawlingCLITypeScript

★ 25,768주당 +83조회 34

무엇인가

Crawlee는 Node.js와 TypeScript로 크롤러를 작성할 때 쓰는 프레임워크다. Apify가 개발하고 `crawlee` NPM 패키지로 배포한다. 링크를 따라 페이지를 순회하고 데이터를 추출해 디스크나 클라우드에 저장하는 과정을 하나의 파이프라인으로 묶는다. HTTP 요청과 실제 브라우저 실행을 동일한 코드 구조로 다룬다.

어떻게 동작하나

크롤러는 Crawler 클래스로 정의한다. PlaywrightCrawler, PuppeteerCrawler, CheerioCrawler, JSDOMCrawler, HttpCrawler가 같은 인터페이스를 공유한다. URL은 RequestQueue에 적재되어 너비 우선 또는 깊이 우선으로 소비된다. 각 요청은 라우팅 함수로 전달되고, 실패하면 재시도 정책에 따라 큐로 되돌아간다. 표 형식 데이터는 Dataset, 파일과 임의 값은 KeyValueStore에 저장되며 기본 경로는 현재 작업 디렉터리의 `./storage`다. 시스템 자원에 맞춰 동시 실행 수를 자동 조절하고, 프록시 회전과 세션 풀을 내장한다. 수명 주기 훅으로 요청 전후와 실패 시점에 코드를 끼워 넣는다.

무엇과 다른가

Puppeteer나 Playwright를 단독으로 쓰면 브라우저 제어만 얻는다. 큐, 재시도, 동시성 제어, 저장소, 프록시 회전은 직접 구현해야 한다. Crawlee는 그 부분을 라이브러리 안에 넣고 브라우저 제어는 백엔드에 위임한다. 같은 크롤러 코드에서 HTTP 크롤링과 브라우저 크롤링을 교체할 수 있다. Python 진영의 Scrapy에 대응하는 위치이며, HTTP2와 브라우저 TLS 지문 재현, 브라우저 유사 헤더 자동 생성으로 기본 설정에서도 봇 차단을 피하기 쉬운 요청을 만든다.

어떻게 쓰나

`npm install crawlee playwright`로 설치한다. Crawlee CLI로 프로젝트를 부트스트랩하고 Getting started 예제를 고르면 의존성과 보일러플레이트가 함께 생성된다. 크롤러 인스턴스를 만들고 router에 요청 처리 함수를 등록한 뒤 run()을 호출하는 흐름이다. 저장 디렉터리, 동시성, 프록시 설정은 Crawlee configuration으로 덮어쓴다. Apify 플랫폼에 배포하거나 함께 제공되는 Dockerfile로 컨테이너에서 실행할 수 있다.

전제와 한계

Node.js 16 이상이 필요하다. Playwright와 Puppeteer는 설치 크기를 줄이려고 번들되지 않으므로 해당 크롤러를 쓰려면 별도로 설치해야 한다. 브라우저 크롤링은 헤드리스와 헤드풀을 모두 다루며 Chrome, Firefox, Webkit을 대상으로 한다. 데이터는 기본적으로 로컬 `./storage`에 쌓이므로 분산 실행이나 영구 보관이 필요하면 저장소 설정을 바꿔야 한다. Python 사용자를 위한 별도 구현이 존재한다.

유사 도구