요청 잠금
2024년 5월부터 (crawlee
버전 3.10.0
), 이 실험 기능이 기본적으로 활성화되었습니다! 문제가 발생하는 경우 다음과 같은 조치를 취할 수 있습니다:
- 크롤러 옵션의
experiments
객체에서requestLocking
을false
로 설정 - 모든
RequestQueue
임포트를RequestQueueV1
로 변경 - GitHub 저장소에 이슈 등록
아래 내용은 문서화를 위해 유지됩니다. 변경 사항에 대해 자세히 알고 싶다면 Apify 블로그의 새로운 Request Queue 저장소 시스템에 대한 글을 참고하세요.
이것은 실험적인 기능입니다. 테스터를 환영하지만, 현재는 프로덕션 환경에서 사용하지 않는 것이 좋습니다.
API는 변경될 수 있으며, 향후 호환성이 깨지는 변경사항이 있을 수 있습니다.
사용 중 문제가 발생하면 GitHub 저장소에 이슈를 등록해 주세요.
crawlee
버전 3.5.5
부터 새로운 요청 잠금 API를 사용할 수 있는 크롤러 옵션이 도입되었습니다. 이 API를 사용하면 여러 크롤러에 RequestQueue
를 전달하여 크롤링 프로세스를 병렬화할 수 있습니다.
요청 잠금을 지원하는 요청 큐는 현재 RequestQueueV2
클래스로 제공됩니다. 실험이 종료되면 이 클래스가 현재의 RequestQueue
클래스를 대체할 예정입니다.
실험 기능 활성화 방법
크롤러에서 사용
이 예제는 CheerioCrawler
에서 실험을 활성화하는 방법을 보여주지만,
모든 크롤러 유형에 적용할 수 있습니다.
import { CheerioCrawler } from 'crawlee';
const crawler = new CheerioCrawler({
experiments: {
requestLocking: true,
},
async requestHandler({ $, request }) {
const title = $('title').text();
console.log(`"${request.url}"의 제목: ${title}`);
},
});
await crawler.run(['https://crawlee.dev']);
크롤러 외부에서 사용 (잠금을 지원하는 요청 큐 설정)
이전에는 crawlee
에서 RequestQueue
를 임포트했습니다. 잠금을 지원하는 큐로 전환하려면 대신 RequestQueueV2
를 임포트해야 합니다.
import { RequestQueueV2 } from 'crawlee';
const queue = await RequestQueueV2.open('my-locking-queue');
await queue.addRequests([
{ url: 'https://crawlee.dev' },
{ url: 'https://crawlee.dev/docs' },
{ url: 'https://crawlee.dev/api' },
]);
크롤러에서 새로운 요청 큐 사용하기
잠금을 지원하는 자체 요청 큐를 만든 경우 크롤러에서도 실험을 활성화해야 합니다.
실험을 활성화하지 않으면 런타임 오류가 발생하고 크롤러가 시작되지 않습니다.
import { CheerioCrawler, RequestQueueV2 } from 'crawlee';
const queue = await RequestQueueV2.open('my-locking-queue');
const crawler = new CheerioCrawler({
experiments: {
requestLocking: true,
},
requestQueue: queue,
async requestHandler({ $, request }) {
const title = $('title').text();
console.log(`"${request.url}"의 제목: ${title}`);
},
});
await crawler.run();
기타 변경사항
이 섹션은 내부 동작을 살펴보고 싶은 개발자를 위한 것입니다.
현재의 요청 큐 로직과 새로운 잠금 기반 요청 큐 로직을 모두 지원하기 위해 RequestProvider
라는 공통 시작점을 구현했습니다.
이 클래스는 대부분의 함수를 기본적으로 구현하지만, 개발자가 fetchNextRequest
와 ensureHeadIsNotEmpty
메서드를 구현해야 합니다.
이 메서드들은 처리할 요청을 로드하고 반환하며, 처리할 요청이 더 있는지 크롤러에 알려주는 역할을 합니다.
다른 소스에서 요청을 가져와야 하는 경우 이 기본 클래스를 사용하여 자체 요청 제공자를 구현할 수 있습니다.
추상 메서드에 대한 제안과 필요한 정확한 타입을 제공하므로, 자체 요청 제공자를 구현할 때는 TypeScript 사용을 권장합니다.