클라우드에서 크롤러 실행하기
Apify 플랫폼
Crawlee는 웹 스크래핑과 자동화 플랫폼인 Apify에서 개발되었습니다. Crawlee 프로젝트의 본거지라고 할 수 있죠. 이 섹션에서는 몇 가지 간단한 단계를 통해 크롤러를 배포하는 방법을 알아보겠습니다. Crawlee 프로젝트는 어디에나 배포할 수 있지만, Apify 플랫폼을 사용하면 가장 좋은 경험을 얻을 수 있습니다.
다른 플랫폼에 Crawlee 프로젝트를 배포하고 싶다면, 배포 섹션을 확인해보세요.
몇 가지 간단한 단계를 통해 Crawlee 프로젝트를 이른바 Actor로 변환할 수 있습니다. Actor는 개발, 실행, 공유 및 통합이 쉬운 서버리스 마이크로 앱입니다. 인프라, 프록시, 스토리지가 모두 준비되어 있습니다. Actor에 대해 자세히 알아보기
이 가이드에서는 Crawlee CLI를 사용하여 프로젝트를 시작했습니다 - 기본 Crawlee 템플릿과 미리 준비된 Dockerfile
을 제공합니다. Apify 플랫폼에 프로젝트를 배포할 계획이라면, Apify CLI로 시작하는 것이 좋을 수 있습니다. 이 또한 여러 프로젝트 템플릿을 제공하며, 모두 Apify 플랫폼에서 바로 사용할 수 있도록 설정되어 있습니다.
의존성 설치
첫 번째 단계는 두 가지 새로운 의존성을 설치하는 것입니다:
-
Apify SDK: Apify 플랫폼 작업을 위한 도구 모음입니다. 스토리지(
RequestQueue
와Dataset
등)를 Apify 클라우드 제품과 연결할 수 있게 해줍니다. Node.js 프로젝트의 의존성이 됩니다.npm install apify
-
Apify CLI: 인증과 배포를 도와주는 명령줄 도구입니다. 전역으로 설치되는 도구로, 한 번만 설치하면 모든 Crawlee/Apify 프로젝트에서 사용할 수 있습니다.
npm install -g apify-cli
Apify 플랫폼에 로그인하기
다음 단계는 Apify 계정 만들기입니다. 걱정하지 마세요, 무료 티어가 있어서 구매하기 전에 먼저 시도해볼 수 있습니다! 계정이 준비되면 방금 설치한 Apify CLI로 로그인할 차례입니다. https://console.apify.com/account#/integrations 에서 찾을 수 있는 개인 액세스 토큰이 필요합니다.
apify login
코드 수정하기
이제 계정 설정이 완료되었으니 코드를 약간 수정해야 합니다. Apify SDK를 사용하여 Crawlee 스토리지(예: RequestQueue
)를 Apify 플랫폼의 대응되는 서비스와 연결하겠습니다 - 그렇지 않으면 Crawlee는 모든 것을 메모리에만 저장할 것입니다.
src/main.js
파일(TypeScript 템플릿을 사용했다면 src/main.ts
)을 열고 메인 스크립트 시작 부분에 Actor.init()
을, 끝 부분에 Actor.exit()
을 추가하세요. 두 함수 모두 비동기이므로 await
를 잊지 마세요. 코드는 다음과 같아야 합니다:
import { Actor } from 'apify';
import { PlaywrightCrawler, log } from 'crawlee';
import { router } from './routes.mjs';
await Actor.init();
// CRAWLEE_LOG_LEVEL 환경 변수나 설정 옵션으로
// 설정하는 것이 더 좋습니다. 이건 예시일 뿐입니다 😈
log.setLevel(log.LEVELS.DEBUG);
log.debug('크롤러 설정 중.');
const crawler = new PlaywrightCrawler({
// if 절이 있는 긴 requestHandler 대신
// router 인스턴스를 제공합니다.
requestHandler: router,
});
await crawler.run(['https://warehouse-theme-metal.myshopify.com/collections']);
await Actor.exit();
Actor.init()
호출은 Crawlee가 기본 메모리 스토리지 인터페이스 대신 Apify API를 사용하도록 설정합니다. 또한 웹소켓을 통한 플랫폼 이벤트 수신 등 다른 설정도 합니다. Actor.exit()
호출은 정상적인 종료를 처리합니다 - Actor.init()
호출로 생성된 열린 핸들을 닫습니다. 이것이 없으면 Node.js 프로세스가 멈춰있게 됩니다.
Actor.init()
동작 이해하기Actor.init()
호출은 환경 변수에 따라 조건부로 작동합니다. 특히 Apify 플랫폼에서 true
로 설정되는 APIFY_IS_AT_HOME
환경 변수에 따라 달라집니다. 즉, 프로젝트는 로컬에서는 동일하게 작동하지만 Apify 플랫폼에 배포되면 Apify API를 사용하게 됩니다.
프로젝트 초기화하기
Apify용 프로젝트를 초기화해야 합니다. Apify CLI를 다시 사용하세요:
apify init
이 명령은 .actor
폴더와 그 안에 actor.json
파일을 생성합니다 - 이 파일은 Actor 이름, 버전, 빌드 태그 등 Apify 플랫폼과 관련된 설정을 포함합니다. 관련 문서에서 설정할 수 있는 모든 항목을 확인하세요.
배포하기!
이제 끝났습니다! 프로젝트를 Apify 플랫폼에 게시할 준비가 되었습니다. Apify CLI를 한 번 더 사용하세요:
apify push
이 명령은 프로젝트를 압축하여 Apify 플랫폼에 업로드하고 Docker 빌드를 시작합니다. 완료되면 플랫폼에서 새로운 Actor의 링크를 받게 됩니다.
웹 스크래핑에 대해 더 배우기
웹 스크래핑과 브라우저 자동화에 대해 더 배우고 싶다면 Apify Academy를 확인해보세요. 초보자부터 고급자까지를 위한 강좌와 튜토리얼이 가득합니다. 가장 좋은 점은: 무료이고 오픈소스라는 것입니다 ❤️
또 다른 프로젝트를 해보고 싶다면, Crawlee를 사용한 HackerNews 스크래퍼 만들기 튜토리얼을 확인해보세요.
감사합니다! 🎉
여기까지입니다! 전체 소개를 읽어주셔서 감사합니다. 잘못된 부분이 있다면 GitHub나 Discord 커뮤니티에서 알려주세요. 즐거운 스크래핑 되세요! 👋