Парсинг веб-страниц с помощью Puppeteer
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, мы свяжемся с вами!