CoderCastrov logo
CoderCastrov
Парсер

Парсинг веб-страниц с помощью Puppeteer

Парсинг веб-страниц с помощью Puppeteer
просмотров
3 мин чтение
#Парсер
Table Of Content

    Что такое парсинг веб-страниц?

    Когда речь идет о электронной коммерции, необходимо быть достаточно конкурентоспособным в сравнении с тем, что предлагают конкуренты. Данные доступны на их веб-сайтах, но вопрос в том, как извлечь и обработать информацию в удобном формате.

    Вот где находит свое применение парсинг веб-страниц.

    Парсинг веб-страниц извлекает данные с любого веб-сайта эффективно в требуемом формате, таком как CSV, JSON и т. д., и также занимает меньше времени на извлечение данных.

    Существует множество инструментов для выполнения парсинга веб-страниц. Некоторые из них являются открытыми инструментами, такими как Puppeteer, Scrapy, PySpider, Webscraper.io, Selenium WebDriver и т. д.

    Парсинг веб-страниц находит свое применение во многих отраслях, включая:

    • Агрегация новостных статей
    • Обработка естественного языка
    • Данные для создания моделей машинного обучения
    • Мониторинг продуктов и цен
    • Оптимизация поисковых систем
    • Журналистика
    • Поиск работы
    • Исследование юридических процессов

    Почему Puppeteer

    • API Puppeteer осуществляет вызовы непосредственно через API протокола DevTools
    • Puppeteer может получать уведомления о всех запросах и ответах от браузера, которые могут быть записаны для последующего использования
    • Он может выполнять действия по перехвату сетевой активности, такие как запись, изменение, блокировка или генерация ответов на запросы, отправленные браузером
    await page.setRequestInterception(true);
    page.on('request', request => {
      if (request.resourceType() === 'image'){
        //Выполнить действие
      }
    • Он не зависит от внешнего драйвера для запуска тестов или взаимодействия с браузером
    • По умолчанию он выполняет скрипты в безголовом режиме, что повышает скорость и производительность
    const browser = await puppeteer.launch({headless: true});

    Установка

    //Создайте директорию проекта
    mkdir scraping && cd automation//Инициализация
    npm init//Установите Puppeteer
    npm install puppeteer --save-dev//Установите Puppeteer Cluster для параллелизации
    npm install puppeteer-cluster --save-dev

    Настройка

    В этой статье давайте использовать Puppeteer для парсинга продуктового веб-сайта. Возьмем для примера bigbasket.com.

    Сначала давайте соберем список URL-адресов, которые нужно спарсить.

    После получения списка URL-адресов мы должны спарсить содержимое и сохранить данные в файл. Последовательное выполнение этой задачи не является хорошей идеей, так как один процесс должен ждать завершения другого процесса. Это затратное по времени занятие, когда речь идет о множестве процессов, ожидающих в очереди. Чтобы преодолеть это, мы собираемся выполнять эти действия параллельно, где процессы выполняются одновременно и занимают меньше времени.

    Существует множество библиотек, которые помогают в параллельном выполнении с использованием Puppeteer, например: Generic Pool, Puppeteer Cluster.

    Почему Puppeteer Cluster

    Puppeteer Cluster - это библиотека, которая создает пул экземпляров Chromium с использованием Puppeteer. Она помогает параллельно выполнять несколько страниц или тестов. Она также автоматически перезапускает браузер в случае сбоя.

    Использование

    Все, что вам нужно предоставить при использовании функции Puppeteer Cluster, это:

    • Количество процессов, которые должны выполняться параллельно
    const cluster = await Cluster.launch({
        concurrency: Cluster.CONCURRENCY_CONTEXT,
        maxConcurrency: 5
    });
    • Определите задачу, которую нужно выполнить
    await cluster.task(async ({ page, data: url }) => {
        await page.goto(url);
        //Выполнить действие
    })
    • Вызовите задачу с использованием очереди и дождитесь завершения выполнения кластера
    • Сохраните спарсенные данные в требуемом формате файла
    fs.writeFile(fileName + '.txt', data_to_be_saved, 'utf8', function (_err_) {
      if (err) { 
        console.log(err);
      }
    })

    Пример парсинга продуктового сайта параллельно с использованием Puppeteer Cluster

    Помимо парсинга, вы все равно можете использовать Puppeteer для автоматизации отправки форм, тестирования пользовательского интерфейса и т. д.


    Francium Tech - это технологическая компания, которая сосредоточена на создании программного обеспечения высокого качества масштаба с крайне высокой скоростью. Нас не пугают числа и объем данных. Если у вас есть какие-либо требования или вы хотите бесплатную проверку состояния ваших систем или архитектуры, не стесняйтесь писать на contact@francium.tech, мы свяжемся с вами!