결과 저장소
Crawlee는 특정 작업에 유용한 여러 가지 결과 저장소 유형을 제공합니다. 데이터는 CRAWLEE_STORAGE_DIR
환경 변수로 정의된 로컬 디스크 디렉토리에 저장됩니다. 이 변수가 정의되지 않은 경우, Crawlee는 기본적으로 현재 작업 디렉토리의 ./storage
를 CRAWLEE_STORAGE_DIR
로 설정합니다.
Crawlee 저장소는 MemoryStorage
클래스로 관리됩니다. 크롤러 실행 중에는 모든 정보가 메모리에 저장되며, 동시에 각 저장소 유형 폴더의 로컬 파일로도 저장됩니다.
키-값 저장소
키-값 저장소는 데이터 레코드나 파일을 저장하고 읽는 데 사용됩니다. 각 데이터 레코드는 고유한 키로 식별되며 MIME 콘텐츠 타입과 연결됩니다. 키-값 저장소는 웹 페이지 스크린샷, PDF 저장 또는 크롤러 상태 유지에 이상적입니다.
각 Crawlee 프로젝트 실행에는 기본 키-값 저장소가 연결됩니다. 관례상 프로젝트의 입력과 출력은 기본 키-값 저장소의 INPUT
과 OUTPUT
키에 각각 저장됩니다. 일반적으로 입력과 출력은 JSON 파일이지만, 다른 형식일 수도 있습니다.
Crawlee에서 키-값 저장소는 KeyValueStore
클래스로 표현됩니다. 기본 키-값 저장소에 쉽게 접근할 수 있도록 KeyValueStore.getValue()
와 KeyValueStore.setValue()
함수도 제공됩니다.
데이터는 CRAWLEE_STORAGE_DIR
환경 변수로 지정된 디렉토리에 다음과 같이 저장됩니다:
{CRAWLEE_STORAGE_DIR}/key_value_stores/{STORE_ID}/{KEY}.{EXT}
{STORE_ID}
는 키-값 저장소의 이름 또는 ID입니다. CRAWLEE_DEFAULT_KEY_VALUE_STORE_ID
환경 변수로 재정의하지 않는 한, 기본 키-값 저장소의 ID는 default
입니다. {KEY}
는 레코드의 키이며, {EXT}
는 데이터 값의 MIME 콘텐츠 타입에 해당합니다.
다음 코드는 키-값 저장소의 기본 작업을 보여줍니다:
import { KeyValueStore } from 'crawlee';
// 기본 키-값 저장소에서 INPUT 가져오기
const input = await KeyValueStore.getInput();
// 기본 키-값 저장소에 OUTPUT 쓰기
await KeyValueStore.setValue('OUTPUT', { myResult: 123 });
// 이름이 지정된 키-값 저장소 열기
const store = await KeyValueStore.open('some-name');
// 이름이 지정된 키-값 저장소에 레코드 쓰기
// JavaScript 객체는 자동으로 JSON으로 변환되며,
// 문자열과 바이너리 버퍼는 그대로 저장됩니다
await store.setValue('some-key', { foo: 'bar' });
// 이름이 지정된 키-값 저장소에서 레코드 읽기
// JSON은 자동으로 JavaScript 객체로 파싱되고,
// 텍스트 데이터는 문자열로 반환되며, 다른 데이터는 바이너리 버퍼로 반환됩니다
const value = await store.getValue('some-key');
// 이름이 지정된 키-값 저장소에서 레코드 삭제
await store.setValue('some-key', null);
키-값 저장소에서 입력을 가져오는 실제 예제는 스크린샷 예제를 참조하세요.
데이터셋
데이터셋은 온라인 스토어 제품이나 부동산 매물과 같이 각 객체가 동일한 속성을 가진 구조화된 데이터를 저장하는 데 사용됩니다. 데이터셋은 테이블로 생각할 수 있으며, 각 객체는 행이고 속성은 열입니다. 데이터셋은 추가 전용 저장소입니다 - 새 레코드만 추가할 수 있고, 기존 레코드는 수정하거나 삭제할 수 없습니다.
각 Crawlee 프로젝트 실행에는 기본 데이터셋이 연결됩니다. 일반적으로 크롤러 실행에 특정한 크롤링 결과를 저장하는 데 사용됩니다. 사용은 선택사항입니다.
Crawlee에서 데이터셋은 Dataset
클래스로 표현됩니다. 기본 데이터셋에 쉽게 쓸 수 있도록 Dataset.pushData()
함수도 제공됩니다.
데이터는 CRAWLEE_STORAGE_DIR
환경 변수로 지정된 디렉토리에 다음과 같이 저장됩니다:
{CRAWLEE_STORAGE_DIR}/datasets/{DATASET_ID}/{INDEX}.json
{DATASET_ID}
는 데이터셋의 이름 또는 ID입니다. CRAWLEE_DEFAULT_DATASET_ID
환경 변수로 재정의하지 않는 한, 기본 데이터셋의 ID는 default
입니다. 각 데이터셋 항목은 별도의 JSON 파일로 저장되며, {INDEX}
는 데이터셋에서 해당 항목의 0부터 시작하는 인덱스입니다.
다음 코드는 데이터셋의 기본 작업을 보여줍니다:
import { Dataset } from 'crawlee';
// 기본 데이터셋에 단일 행 쓰기
await Dataset.pushData({ col1: 123, col2: 'val2' });
// 이름이 지정된 데이터셋 열기
const dataset = await Dataset.open('some-name');
// 단일 행 쓰기
await dataset.pushData({ foo: 'bar' });
// 여러 행 쓰기
await dataset.pushData([{ foo: 'bar2', col2: 'val2' }, { col3: 123 }]);
데이터셋을 사용하여 크롤러 결과를 저장하는 방법은 Cheerio 크롤러 예제를 참조하세요.
저장소 정리하기
달리 지정하지 않는 한 기본 저장소는 크롤러가 시작되기 전에 정리됩니다. 이는 저장소를 열 때(Dataset.open()
등) 또는 도우미 메서드(Dataset.pushData()
는 내부적으로 Dataset.open()
을 호출)를 통해 기본 저장소를 사용할 때 발생합니다. 코드에서 저장소를 명시적으로 사용하지 않는 경우, 크롤러의 run
메서드가 실행될 때 정리가 수행됩니다. 저장소를 더 일찍 정리해야 하는 경우, purgeDefaultStorages()
도우미를 명시적으로 사용할 수 있습니다:
import { purgeDefaultStorages } from 'crawlee';
await purgeDefaultStorages();
이 함수를 호출하면 기본 키-값 저장소 디렉토리의 INPUT
키를 제외한 기본 결과 저장소 디렉토리가 정리됩니다. 이는 StorageClient
인터페이스에서 (선택적) purge
메서드를 실행하는 단축키입니다. 다시 말해, 현재 사용 중인 기본 저장소 구현의 purge
메서드를 호출합니다. 또한 이 메서드는 주어진 실행 컨텍스트에서 저장소가 한 번만 정리되도록 보장하므로 여러 번 호출해도 안전합니다.