Пропуск навигации для определенных запросов
При сканировании веб-сайта вы можете столкнуться с определенными ресурсами, которые хотели бы сохранить, но для этого не требуется полная мощность краулера (например, изображения, доставляемые через 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();