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

Пропуск навигации для определенных запросов

При сканировании веб-сайта вы можете столкнуться с определенными ресурсами, которые хотели бы сохранить, но для этого не требуется полная мощность краулера (например, изображения, доставляемые через CDN).

Комбинируя опцию Request#skipNavigation с методом sendRequest, мы можем получить изображение из CDN и сохранить его в хранилище ключ-значение без использования полного краулера.

к сведению

В этом примере мы используем PlaywrightCrawler для демонстрации, но эта функциональность доступна во всех предоставляемых нами краулерах.

Run on
import { PlaywrightCrawler, KeyValueStore } from 'crawlee';

// Создаем хранилище ключ-значение для всех изображений, которые мы найдем
const imageStore = await KeyValueStore.open('images');

const crawler = new PlaywrightCrawler({
async requestHandler({ request, page, sendRequest }) {
// Запрос должен иметь пропущенную навигацию
if (request.skipNavigation) {
// Запрашиваем изображение и получаем его буфер обратно
const imageResponse = await sendRequest({ responseType: 'buffer' });

// Сохраняем изображение в хранилище ключ-значение
await imageStore.setValue(`${request.userData.key}.png`, imageResponse.body);

// Прерываем выполнение остального кода, так как нам не нужно его выполнять
return;
}

// Получаем все источники изображений на текущей странице
const images = await page.$$eval('img', (imgs) => imgs.map((img) => img.src));

// Добавляем все URL в запросы для краулера, присваивая каждому изображению ключ
await crawler.addRequests(images.map((url, i) => ({ url, skipNavigation: true, userData: { key: i } })));
},
});

await crawler.addRequests(['https://crawlee.dev']);

// Запускаем краулер
await crawler.run();