본문으로 건너뛰기

Got Scraping

소개

BasicCrawler를 사용할 때는 수동으로 요청을 보내야 합니다. 이를 위해 컨텍스트 인식 sendRequest() 함수를 사용할 수 있습니다:

import { BasicCrawler } from 'crawlee';

const crawler = new BasicCrawler({
async requestHandler({ sendRequest, log }) {
const res = await sendRequest();
log.info('받은 본문', res.body);
},
});

내부적으로 got-scraping을 사용합니다. Got Scraping은 브라우저 요청을 모방하도록 개발된 Got 확장 프로그램으로, 차단되지 않고 웹페이지를 열 수 있는 가능성이 높습니다.

sendRequest API

async sendRequest(overrideOptions?: GotOptionsInit) => {
return gotScraping({
url: request.url,
method: request.method,
body: request.payload,
headers: request.headers,
proxyUrl: crawlingContext.proxyInfo?.url,
sessionToken: session,
responseType: 'text',
...overrideOptions,
retry: {
limit: 0,
...overrideOptions?.retry,
},
cookieJar: {
getCookieString: (url: string) => session!.getCookieString(url),
setCookie: (rawCookie: string, url: string) => session!.setCookie(rawCookie, url),
...overrideOptions?.cookieJar,
},
});
}

url

기본적으로 현재 작업의 URL입니다. 필요한 경우 string 또는 URL 인스턴스로 재정의할 수 있습니다.

자세한 내용은 Got 문서를 참조하세요.

method

기본적으로 현재 작업의 HTTP 메서드입니다. 가능한 값은 'GET', 'POST', 'HEAD', 'PUT', 'PATCH', 'DELETE'입니다.

자세한 내용은 Got 문서를 참조하세요.

body

기본적으로 현재 작업의 HTTP 페이로드입니다.

자세한 내용은 Got 문서를 참조하세요.

headers

기본적으로 현재 작업의 HTTP 헤더입니다. string 값을 가진 객체입니다.

자세한 내용은 Got 문서를 참조하세요.

proxyUrl

protocol://username:password@hostname:port 형식의 프록시 서버를 나타내는 문자열입니다.

예를 들어, Apify 프록시 서버는 다음과 같습니다: http://auto:[email protected]:8000

Basic Crawler에는 세션이나 프록시 개념이 없으므로 proxyUrl 옵션을 수동으로 전달해야 합니다:

import { BasicCrawler } from 'crawlee';

const crawler = new BasicCrawler({
async requestHandler({ sendRequest, log }) {
const res = await sendRequest({
proxyUrl: 'http://auto:[email protected]:8000',
});
log.info('받은 본문', res.body);
},
});

실제 IP 주소를 숨기기 위해 프록시를 사용합니다.

자세한 내용은 Got Scraping 문서를 참조하세요.

sessionToken

브라우저 지문을 생성할 때 키로 사용되는 비원시 객체입니다. 동일한 토큰을 가진 지문은 변경되지 않습니다. 이는 동일한 Apify 세션을 사용할 때 user-agent 헤더를 유지하는 데 사용될 수 있습니다.

자세한 내용은 Got Scraping 문서를 참조하세요.

responseType

이 옵션은 응답을 어떻게 파싱할지 정의합니다.

기본적으로 HTML 웹사이트를 가져오므로 responseType'text'로 설정합니다. JSON도 가능합니다:

import { BasicCrawler } from 'crawlee';

const crawler = new BasicCrawler({
async requestHandler({ sendRequest, log }) {
const res = await sendRequest({ responseType: 'json' });
log.info('받은 본문', res.body);
},
});

자세한 내용은 Got 문서를 참조하세요.

cookieJar

Got은 쿠키를 관리하기 위해 cookieJar를 사용합니다. tough-cookie 패키지의 인터페이스를 가진 객체입니다.

예시:

import { BasicCrawler } from 'crawlee';
import { CookieJar } from 'tough-cookie';

const cookieJar = new CookieJar();

const crawler = new BasicCrawler({
async requestHandler({ sendRequest, log }) {
const res = await sendRequest({ cookieJar });
log.info('받은 본문', res.body);
},
});

자세한 내용은 다음을 참조하세요

retry.limit

이 옵션은 Got의 최대 재시도 횟수를 지정합니다.

기본적으로 retry.limit0으로 설정됩니다. Crawlee에는 자체적인 (충분히 복잡한) 재시도 관리가 있기 때문입니다.

안정성을 위해 이 값을 변경하지 않는 것이 좋습니다.

useHeaderGenerator

브라우저 헤더를 생성할지 여부를 나타내는 불리언 값입니다. 기본적으로 true로 설정되어 있으며, 더 나은 결과를 위해 이 설정을 유지하는 것이 좋습니다.

headerGeneratorOptions

브라우저 지문을 생성하는 방법을 나타내는 객체입니다. 예시:

import { BasicCrawler } from 'crawlee';

const crawler = new BasicCrawler({
async requestHandler({ sendRequest, log }) {
const res = await sendRequest({
headerGeneratorOptions: {
devices: ['mobile', 'desktop'],
locales: ['en-US'],
operatingSystems: ['windows', 'macos', 'android', 'ios'],
browsers: ['chrome', 'edge', 'firefox', 'safari'],
},
});
log.info('받은 본문', res.body);
},
});

자세한 내용은 HeaderGeneratorOptions 문서를 참조하세요.

관련 링크