Веб-скрейпинг с Puppeteer: Навигируйте, извлекайте и автоматизируйте как профи
Всё, что может быть автоматизировано, будет автоматизировано. Это больше не предсказание — это происходит прямо сейчас, особенно в сфере сбора данных. Но скрейпинг уже не тот, что раньше. Современные сайты загружают контент динамически, активно блокируют ботов и постоянно обновляют свои защиты. Старые инструменты? Они уже не справляются. Puppeteer в сочетании с прокси меняет правила игры.
Мы расскажем вам об основах — настройке Puppeteer, работе со сложным динамическим контентом и использовании прокси для обхода блокировок и лимитов. Готовы скрейпить как профессионал? Поехали!
Почему стоит выбрать Puppeteer
Puppeteer — это не просто обычный скрейпер. Он управляет полноценным браузером — Chrome или Chromium — выполняя все скрипты так же, как это сделал бы человек. Это значит, что вы получаете реальный контент страницы, даже если он формируется JavaScript после загрузки.
- Сбор динамического контента: Извлекайте данные с сайтов, которые не отдают статический HTML.
- Автоматизированное тестирование: Запускайте реальные браузерные тесты без интерфейса.
- Мониторинг SEO: Отслеживайте обновления на сайтах конкурентов, сильно зависящих от JavaScript.
Но одного скрейпинга недостаточно. Сайты борются с этим с помощью блокировок IP и лимитов частоты запросов. Вот тут прокси становятся вашим секретным оружием.
Настройка Puppeteer
Первым делом установите Puppeteer:
npm install puppeteer
По умолчанию Puppeteer работает в headless-режиме — без открытия окна браузера. Это быстрее и легче. Хотите видеть, что происходит во время разработки? Отключите headless-режим.
Пример для запуска Puppeteer и открытия страницы:
const puppeteer = require('puppeteer'); (async () => { const browser = await puppeteer.launch({ headless: true }); const page = await browser.newPage(); await page.goto('https://books.toscrape.com/'); console.log('Страница загружена!'); await browser.close(); })();
Извлечение данных
После открытия страницы Puppeteer позволяет вам получать нужные данные, взаимодействуя с DOM.
Хотите названия книг, цены и наличие? Смотрите пример:
const titleSelector = 'article.product_pod h3 a'; const priceSelector = 'article.product_pod p.price_color'; const availabilitySelector = 'article.product_pod p.instock.availability'; const bookData = await page.evaluate((titleSel, priceSel, availSel) => { const books = []; const titles = document.querySelectorAll(titleSel); const prices = document.querySelectorAll(priceSel); const availability = document.querySelectorAll(availSel); titles.forEach((title, i) => { books.push({ title: title.textContent.trim(), price: prices[i].textContent.trim(), availability: availability[i].textContent.trim(), }); }); return books; }, titleSelector, priceSelector, availabilitySelector); console.log(bookData);
В итоге у вас будет структурированный JSON с данными, готовыми к использованию.
Гладкая работа с динамическим контентом
JavaScript-насыщенные сайты не загружают всё сразу. Puppeteer поможет вам с этим.
page.waitForSelector()
, чтобы дождаться появления элементов.page.waitForNavigation()
, чтобы дождаться полной загрузки страницы.
await page.goto('https://books.toscrape.com/'); await page.waitForSelector('article.product_pod');
Так вы будете уверены, что скрейпите реальный контент, а не пустую оболочку.
Использование Puppeteer с прокси
Практический пример с использованием резидентных прокси:
const puppeteer = require('puppeteer'); (async () => { const proxyServer = 'rp.scrapegw.com:6060'; const proxyUsername = 'proxy_username'; const proxyPassword = 'proxy_password'; const browser = await puppeteer.launch({ headless: true, args: [`--proxy-server=http://${proxyServer}`], }); const page = await browser.newPage(); await page.authenticate({ username: proxyUsername, password: proxyPassword, }); await page.goto('https://httpbin.org/ip', { waitUntil: 'networkidle2' }); const content = await page.evaluate(() => document.body.innerText); console.log('Текущий IP:', content); await browser.close(); })();
- Запускает Puppeteer через прокси.
- Аутентифицируется с помощью учетных данных прокси.
- Проверяет ваш IP, чтобы убедиться, что прокси работает.
Почему прокси так важны
Без прокси ваш IP быстро могут заблокировать или запретить доступ. Прокси решают эту проблему, подменяя IP-адреса, помогая избежать обнаружения и оставаться «в тени». Они также позволяют получать данные, доступные только для определённых регионов, расширяя ваши возможности. К тому же, прокси равномерно распределяют ваши запросы, предотвращая превышение лимитов и обеспечивая бесперебойный сбор данных.
Заключение
В сочетании с надежными прокси Puppeteer раскрывает весь потенциал веб-скрейпинга. Однако использование некачественных прокси может свести вашу работу на нет, привести к блокировкам и нестабильным данным. Чтобы обеспечить плавный и стабильный скрейпинг, крайне важно выбирать проверенных поставщиков прокси.