본문으로 건너뛰기

HTTP 크롤러

이 예제는 HttpCrawler를 사용하여 HTML 크롤러를 구축하는 방법을 보여줍니다. 외부 파일에서 URL 목록을 크롤링하고, 일반 HTTP 요청을 사용하여 각 URL을 로드한 다음 HTML을 저장하는 방법을 설명합니다.

Run on
import { HttpCrawler, log, LogLevel } from 'crawlee';

// 크롤러에는 로깅과 같은 다양한 유틸리티가 포함되어 있습니다.
// 디버깅 경험을 향상시키기 위해 여기서는 디버그 수준의 로깅을 사용합니다.
// 이 기능은 선택사항입니다!
log.setLevel(LogLevel.DEBUG);

// HttpCrawler 클래스의 인스턴스를 생성합니다 - URL을 자동으로 로드하고
// HTML을 저장하는 크롤러입니다.
const crawler = new HttpCrawler({
// 크롤러는 웹 페이지를 병렬로 다운로드하고 처리하며, 동시성은
// 사용 가능한 시스템 메모리와 CPU를 기반으로 자동 관리됩니다(AutoscaledPool 클래스 참조).
// 여기서는 동시성에 대한 제한을 설정합니다.
minConcurrency: 10,
maxConcurrency: 50,

// 오류 발생 시 각 페이지를 최대 한 번만 재시도합니다.
maxRequestRetries: 1,

// 각 페이지 처리 시간 제한을 늘립니다.
requestHandlerTimeoutSecs: 30,

// 크롤링당 최대 10개의 요청으로 제한합니다
maxRequestsPerCrawl: 10,

// 이 함수는 크롤링할 각 URL에 대해 호출됩니다.
// 다음과 같은 옵션이 포함된 객체를 매개변수로 받습니다:
// https://crawlee.dev/api/http-crawler/interface/HttpCrawlerOptions#requestHandler
// 데모를 위해 다음 2가지만 사용합니다:
// - request: 크롤링 중인 URL 및 HTTP 메서드와 같은 정보가 포함된 Request 클래스의 인스턴스
// - body: 현재 페이지의 HTML 코드
async requestHandler({ pushData, request, body }) {
log.debug(`${request.url} 처리 중...`);

// 결과를 데이터셋에 저장합니다. 로컬 구성에서는
// 데이터가 ./storage/datasets/default에 JSON 파일로 저장됩니다
await pushData({
url: request.url, // 페이지 URL
body, // 페이지의 HTML 코드
});
},

// 이 함수는 페이지 처리가 maxRequestRetries + 1회 이상 실패할 경우 호출됩니다.
failedRequestHandler({ request }) {
log.debug(`${request.url} 요청이 두 번 실패했습니다.`);
},
});

// 크롤러를 실행하고 완료될 때까지 대기합니다.
// 외부 파일에서 URL 목록을 크롤링하고, 일반 HTTP 요청을 사용하여 각 URL을 로드한 후 HTML을 저장합니다
await crawler.run(['https://crawlee.dev']);

log.debug('크롤러가 완료되었습니다.');