Парсинг в современном мире – это скорее данность, чем просто необходимость. Практически любой бизнес собирает данные о конкурентах, о тенденциях на рынке, о товарах поставщиков, о самих поставщиках, о клиентах и т.д. Просто мало кто умеет автоматизировать процессы сбора информации. В основе автоматизации всегда программные решения – парсеры. Их можно написать с нуля, а можно использовать библиотеки, фреймворки и интеграции с внешними сервисами и инструментами.
Если вы планируете работать с сайтами, то встаёт вопрос обхода систем защиты и правильного отображения динамического контента. Лучше всего с такими задачами справляются актуальные версии браузеров. Но как их интегрировать с парсером? Есть два столпа: Playwright и Puppeteer. Название первого переводится на русский как «Драматург», а второго – как «Кукловод».
Ниже подробное сравнение: «Драматург против Кукловода».
Playwright – это библиотека автоматизации с открытым исходным кодом, разработанная корпорацией Microsoft для тестирования браузеров и сайтов. Последний пункт (автоматизация работы с сайтами) активно используется для задач парсинга.
Официальный сайт (обратите внимание: по умолчанию открывается версия для Python, но есть поддержка и других языков программирования).
Playwright впервые был представлен в 2020 году и очень быстро набрал популярность в среде веб-разработчиков.
Основное назначение библиотеки описывается тезисом: «Any browser. Any platform. One API». Что дословно переводится как «Любой браузер. Любая платформа. Один API».
Библиотека Playwright идеально подходит для следующих задач:
Итого: крутой фреймворк, который способен автоматизировать массу задач, связанных с парсингом и тестированием.
Puppeteer – это JavaScript-библиотека, разработанная командой Chrome Browser Automation (входит в состав официальных разработчиков Google Chrome), она реализует высокоуровневый API-интерфейс для протокола Chrome DevTools Protocol и драйвера WebDriver BiDi. В первую очередь такая прослойка нужна для унификации синтаксиса при написании скриптов тестирования сайтов и web-приложений.
Как можно догадаться, протокол Chrome DevTools предназначен для работы только с браузерами Google Chrome или Chromium.
Немного сложнее дела обстоят с веб-драйвером BiDi – с недавних пор он поддерживает работу с Firefox, поэтому при желании Puppeteer можно интегрировать не только с Хромом (как это изначально задумывалось), но и с Огнелисом.
Официальный сайт Puppeteer. Упоминание инструмента на портале для разработчиков Chrome DevTools.
Разработка Puppeteer ведётся с 2017 года (через год после запуска headless-Chrome). Существует упрощённая версия библиотеки, puppeteer-core, которая может интегрироваться с любым установленным в системе Chromium-браузером, например, с Edge.
Puppeteer подходит в основном для простых задач, связанных с браузером Chrome. С библиотекой не получится быстро реализовать сложных корпоративных систем тестирования, но с задачами парсинга Puppeteer сможет справиться на «ура». Итак, в каких ситуациях её можно использовать:
При определённых усилиях на базе Puppeteer можно организовать удалённый сервер, который будет выполнять задачи и отдавать результат по API.
Если не вдаваться в детали, то обе библиотеки можно использовать фактически для одних и тех же задач: парсинг и тестирование. И там, и там есть поддержка асинхронности, кроссплатформенность и т.п. Но есть и нюансы, которые делают инструменты различными.
Сначала ключевые технические отличия:
Остальные различия рассмотрим в разрезе отдельных направлений (категорий).
Так как Puppeteer работает напрямую с headless-протоколом Хрома, то он ожидаемо оказывается производительнее. Вот примеры реального тестирования библиотек на одной и той же задаче рендеринга.
Playwright отрабатывает немного медленнее, но это отставание нельзя назвать критическим.
По отзывам многих разработчиков Playwright оказывается выгоднее в определённых задачах, когда можно задействовать отправку целого пакета запросов или использовать шифрование end-to-end (E2E).
И там, и там простой синтаксис, а также достаточный набор методов для использования вызовов. Но Puppeteer фактически повторяет API Хрома (Chrome DevTools). Каждая новая версия библиотеки подстраивается под актуальную версию браузера и тесно с ним связана.
А Playwright – это универсальное средство, которое обеспечивает работу с разными браузерами. Вне зависимости от используемого языка программирования синтаксис API остаётся унифицированным. Поэтому Playwright по умолчанию гибче – библиотеку можно применять в большом количестве ситуаций.
Но на этом преимущества Playwright не заканчиваются. Так как инструмент поддерживается большим сообществом, для него легко найти готовые реализации скриптов под любые ситуации применения: парсинг, тестирование, запуск на удалённом сервере и т.п. Естественно, объём написания своего кода в этом случае сильно сокращается – не нужно выдумывать свой велосипед, достаточно взять что-то готовое.
Для Puppeteer тоже можно поискать нишевые решения, но их заметно меньше. Объём своего кода и сложность разработки существенного возрастают. Это не может не отразиться на гибкости и удобстве использования.
Например, работа с прокси, с мультиаккаунтами и т.п. – всё это возможно только с использованием специальных дополнений от сторонних разработчиков. У Playwright большинство таких решений есть в связанных репозиториях от тех же разработчиков или из коробки.
Идеальные прокси для получения ценных данных со всего мира.
Оба инструмента поддерживаются крупными вендорами и имеют открытый исходный код. Они регулярно обновляются, в них постоянно правятся найденные ошибки и добавляются новые функции.
Но есть незначительные нюансы:
В вопросе обслуживания Playwright и Puppeteer, можно сказать, условный паритет.
Но есть небольшой перевес в отношении поддержки – см. раздел про кривую обучения.
Playwright поддерживает функционал масштабирования из коробки – у него есть всё необходимое для сложных задач тестирования или парсинга, в том числе мануалы по развёртыванию на удалённых серверах.
Puppeteer тоже можно масштабировать, но для этого нужно приложить дополнительные усилия – как минимум нужно будет поискать готовые реализации под свои задачи в репозиториях сторонних разработчиков. Основная команда Puppeteer концентрирует свои усилия на ядре, то есть на самой библиотеке. А что вы будете делать с ней, зависит только от вашей фантазии и предметных знаний. Часть наиболее удачных примеров нишевых реализаций можно поискать в специальном разделе официального сайта Puppeteer – здесь.
Получите доступ к нашей прокси-сети с более чем 200 локациями и более чем 10 миллионами IP-адресов.
Google традиционно не любит общаться со своими пользователями. Документация к Puppeteer скудная и не рассчитана на новичков. Она оформлена по wiki-формату с массой перелинковок по терминам. Всё вместе читается и воспринимается очень тяжело.
Вместе с тем, обучение работе с Puppeteer может проходить проще и быстрее по причине того, что библиотека задействует протокол Chrome DevTools (без каких-либо веб-драйверов и т.п.) и имеет очень простой синтаксис вызовов. В итоге новичкам проще начать, а начать погружаться в детали можно по мере обучения.
Microsoft, напротив, предлагает бесплатный учебный курс, предоставляет видео, мануалы и подробную документацию. Всё вместе это облегчает процесс самостоятельного обслуживания скриптов на базе Playwright. Синтаксис вызовов нельзя назвать сложным, да и установка headless-браузеров происходит в автоматическом режиме.
Вместе с тем, так как возможностей у библиотеки больше, обучение работе с ней становится неизбежно сложнее. Но в итоге, когда знания по теме уже есть, можно создавать очень сложные и масштабные программные решения.
В Playwright парсинг и скрипты тестирования сайтов могут быть сложнее и масштабнее. Этому способствует комплексная экосистема и большое количество встроенных возможностей библиотеки.
В Puppeteer парсинг организовать проще и быстрее, но есть ряд ограничений: по языку разработки и по масштабированию. Зато отработка запросов к headless-браузеру занимает меньше времени и потребляет меньше вычислительных ресурсов. Чтобы создать сложные скрипты, придётся потрудиться больше, так как готовых решений на базе Puppeteer пока не так много.
Это и есть ключевые различия библиотек.
Если вам нужно написать качественный парсер, который сможет успешно избегать блокировок, нужно учесть следующие моменты:
Полный гайд о том, как парсить сайты без блокировок.
Обе библиотеки по-своему хороши. Playwright поддерживает работу с разными языками программирования, обеспечивает быструю установку headless-браузеров из специального репозитория, имеет массу встроенных функций и легко расширяется за счёт каталога официальных и неофициальных дополнений. С Playwright можно реализовывать серьёзные корпоративные решения.
Puppeteer лёгкая и быстрая библиотека, напрямую взаимодействует с уже установленным браузером Google Chrome по протоколу Chrome Devtools Protocol (CDP). Тоже расширяется и подходит для серьёзных задач. Но с ней объём кода в крупных проектах может быть больше, так как на базе Puppeteer пока мало готовых нишевых решений, да и документация откровенно слабая (рассчитана исключительно на профи).
Какую бы библиотеку вы ни выбрали, важно помнить о механизмах защиты целевых сайтов – чтобы избежать блокировок.
Ключевой аспект при массовом парсинге – обязательная работа через прокси с ротацией. Приобрести качественные ротируемые прокси (серверные, мобильные и резидентные) можно у нас. Froxy – это 10+ млн. IP по всему миру. Точность таргетинга до города и/или оператора связи. Ротация возможна по времени или при каждом новом запросе.