Парсинг с помощью Crawlee

Crawlee

Парсинг — это когда извлекают данные данные с сайтов и сохраняют в удобные таблицы. Информацию собирают разную:

  • Цены;
  • Отзывы;
  • Оценки;
  • Наименования товаров.

Это может быть любая информация. Суть в механизме: на сайте множество данных, а ты достаешь из этого массива нужные.

 

Так вот, Crawlee — библиотека, которая помогает собрать данные быстро. В статье покажем шаблон, по которому пишут парсеры для сбора информации с сайтов. Но сперва проясним разницу между парсерами и краулерами. Без этого не понять суть Crawlee.

Разница между краулерами и парсерами

В теме сбора данных термины "краулер" и "парсер" используют как синонимы. Однако это ошибка.

Краулер (от англ. crawl — ползать)

Краулер — программа, которая "обходит" сайты. Чтобы собрать данные, она переходит по ссылкам внутри страниц.

Задача краулера — найти страницы, с которых собирать данные. Краулер двигается по сайтам как паук по паутине (отсюда название web crawler), переходит от одной страницы к другой, исходя из логики, заданной разработчиком.

Например: краулер начинает путь с главной страницы сайта, переходит по ссылкам на подстраницы, загружает HTML-код.

Краулинг — то, что делают поисковики при индексации страниц.

краулинг

Парсер (от англ. parse — разбирать)

Парсер — программа, которая берет данные краулера (список страниц сайта) и структурирует их. Задача парсера — извлечь нужную информацию из HTML-кода. Он работает только с тем, что собрал краулер.

Пример: из страницы интернет-магазина парсер выделяет названия товаров, цены и отзывы. Он берет только нужную инфу и только с тех страниц, что дал ему краулер.

парсер

Crawlee все-таки — “краулер” или “парсер”?

Фишка Crawlee в том, что он сочетает обе роли:

  1. Запускает краулеры для обхода сайтов.
  2. Использует встроенные парсеры или пользовательские скрипты, чтобы извлекать данные.

Пример:

  1. Краулер находит все страницы каталога товаров.
  2. Парсер извлекает название, цену и рейтинг с каждой страницы.
  3. Crawlee сохраняет данные в базе.

Crawlee

Что такое Crawlee и почему стоит парсить с ним

Crawlee — JavaScript-библиотека для создания парсеров. Ее фишки:

  • Управление очередями задач;
  • Автоматическое сохранение данных;
  • Возможность парсить сложные сайты. Crawlee незаменим, когда нужно собрать данные с динамических сайтов с контентом, который загружается через JavaScript. Как пример: извлекать отзывы с Amazon, игнорируя подгружаемые блоки рекламы.

Crawlee также полезен тем, кто собирает большие объемы данных. Посмотрим, как его установить и начать работать.

Как установить Crawlee

Чтобы установить Crawlee, делайте следующее.

  1. Установите Node.js. Скачать можно на официальном сайте.
  2. В терминале выполните команду:
    npm install crawlee

парсинг с Crawlee

  1. Создайте проект:
    mkdir crawlee-project && cd crawlee-project

npm init -y

В результате у вас появится рабочая среда для парсинга.

Начало работы с Crawlee

Создайте в текстовом редакторе (хоть в том же “Блокноте”) файл index.js. В нем напишите базовый скрипт для парсинга. Типа такого:

import { CheerioCrawler } from 'crawlee';

 

const crawler = new CheerioCrawler({

    requestHandler: async ({ request, $ }) => {

        const title = $('title').text();

        console.log(`Title of ${request.url}: ${title}`);

    },

});

 

await crawler.run(['https://example.com']);

Этот код отправляет запрос на сайт и выводит заголовок страницы. Crawlee автоматически обрабатывает ответы и использует краулер Cheerio.

Cheerio извлекает данные с HTML-страниц, а Crawlee решает проблему с динамическими сайтами, обрабатывая их через встроенные браузеры. Для вас это значит, что с Crawlee соберете данные даже со сложных сайтов.

Cheerio

Обработка динамических сайтов

Для сайтов, использующих JavaScript, стандартных запросов недостаточно. Crawlee поддерживает Puppeteer и Playwright для работы с такими ресурсами.

Пример:

import { PlaywrightCrawler } from 'crawlee';

 

const crawler = new PlaywrightCrawler({

    requestHandler: async ({ page }) => {

        const data = await page.evaluate(() => document.querySelector('h1').innerText);

        console.log(data);

    },

});

 

await crawler.run(['https://example.com']);

Этот скрипт использует браузер Playwright, чтобы загрузить сайт, дождаться выполнения скриптов и извлечь данные.

Playwright

Обработка капчи и блокировок

Crawlee поддерживает работу с прокси. Арендуйте и добавьте пул прокси в ваш код:

const crawler = new CheerioCrawler({

    proxyConfiguration: { proxyUrls: ['http://proxy1', 'http://proxy2'] },

    requestHandler: async ({ request, $ }) => {

        console.log(`Processing ${request.url}`);

    },

});

Чтобы использовать свои прокси в коде, нужно заменить ['http://proxy1', 'http://proxy2'] на список URL-адресов прокси, составленных из предоставленных при аренде данных: IP, порт, логин и пароль.

прокси

То есть каждый прокси в вашем пуле должен быть записан в формате:

http://логин:пароль@IP:порт

Например, если:

  • IP: 192.168.0.1
  • Порт: 8080
  • Логин: user123
  • Пароль: pass123

Тогда строка будет:

http://user123:pass123@192.168.0.1:8080

Если у вас несколько прокси, запишите их в массиве. Пример:

const proxies = [

    'http://user1:pass1@192.168.0.1:8080',

    'http://user2:pass2@192.168.0.2:8080',

    'http://user3:pass3@192.168.0.3:8080',

];

Теперь подставьте массив proxies в параметр proxyUrls:

const crawler = new CheerioCrawler({

    proxyConfiguration: { proxyUrls: proxies },

    requestHandler: async ({ request, $ }) => {

        console.log(`Processing ${request.url}`);

    },

});

Вот что будет в результате

  1. Crawlee будет брать случайный прокси из массива proxyUrls для каждого запроса.
  2. Прокси автоматически добавятся к запросам, а логин и пароль передаются серверу для авторизации.

Сохранение данных

Собранные данные можно сохранить в файл или базу данных. Crawlee поддерживает встроенный Dataset. Пример:

import { Dataset } from 'crawlee';

 

await Dataset.pushData({ title: 'Example', url: 'https://example.com' });

С помощью этой функции можно собирать сотни тысяч записей без потерь.

сохранение данных

Crawlee превращает сложный процесс парсинга в последовательность понятных шагов. Естественно, в статье мы не беремся рассказать про то, как написать работающий парсер, но мы рассказали последовательность и возможности использования Crawlee.