Перейти к основному содержимому

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, разработанное для имитации запросов браузера, что значительно повышает шансы успешного доступа к веб-странице без блокировки.

API функции sendRequest

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.

BasicCrawler не имеет встроенной концепции сессии или прокси, поэтому нам нужно вручную передавать параметр 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

Непримитивный объект, используемый как ключ при генерации отпечатка браузера. Отпечатки с одинаковым токеном не меняются. Это можно использовать для сохранения заголовка user-agent при использовании одной и той же сессии Apify.

Подробнее в документации 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.limit установлен на 0. Это связано с тем, что 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.

Полезные ссылки