В этом руководстве вы увидите следующее:
- Что такое сайты, перегруженные JavaScript.
- Задачи и методы их решения с помощью рендеринга браузера.
- Как работает перехват вызовов AJAX и каковы его ограничения.
- Современное решение для создания сайтов, перегруженных JavaScript.
Давайте погрузимся!
Что такое сайт, перегруженный JavaScript?
В сфере веб-скреппинга сайт является “JavaScript-тяжелым”, когда данные для сбора не содержатся в исходном HTML-документе, возвращаемом сервером. Вместо этого фактический контент динамически извлекается и отображается в браузере пользователя с помощью JavaScript.
То, как сайт использует JavaScript, напрямую влияет на то, как вам нужно действовать, чтобы извлечь его данные. Как правило, сайты, основанные на JavaScript, следуют трем основным шаблонам:
- Одностраничные приложения (SPA): SPA – это одна веб-страница, которая с помощью JavaScript обновляет определенные разделы новым содержимым с сервера. Другими словами, все веб-приложение – это всего лишь одна веб-страница, которая не перезагружается при каждом взаимодействии с пользователем.
- Взаимодействие с пользователем: Контент появляется только после выполнения определенных действий. Примерами могут служить кнопки “Загрузить еще” и динамическая пагинация.
- Асинхронные данные: Многие сайты для скорости сначала загружают базовый макет страницы, а затем выполняют фоновые вызовы с помощью AJAX для получения данных. Этот механизм часто используется для оперативных обновлений, например, для обновления котировок акций без перезагрузки страницы.
Скрапирование сайтов, перегруженных JavaScript, с помощью полного рендеринга браузера
Средства автоматизации работы браузеров позволяют писать скрипты, запускающие и контролирующие веб-браузеры. Это позволяет им выполнять JavaScript, необходимый для полного рендеринга страницы. Затем вы можете использовать API для выбора элементов HTML и извлечения данных, которые предоставляют эти инструменты, чтобы получить необходимые данные.
Это фундаментальный подход к скраппингу сайтов, насыщенных JavaScript, и здесь мы представим его в следующих разделах:
- Как работают инструменты автоматизации.
- Что такое режимы “без головы” и “с головой”.
- Проблемы и решения, связанные с этим подходом.
- Наиболее используемые инструменты автоматизации браузеров.
Как работают средства автоматизации
Инструменты автоматизации браузера работают по протоколу (например, CDP или BiDi) для отправки команд непосредственно в браузер. Проще говоря, они предоставляют полный API для отправки таких команд, как “перейти по этому URL”, “найти этот элемент” и “нажать эту кнопку”.
Браузер выполняет эти команды на странице, выполняя все JavaScript, необходимые для взаимодействия, описанного в сценарии скраппинга. Средство автоматизации браузера также может получить доступ к отрисованной DOM(Document Object Model). Именно там вы можете найти данные для сканирования.
Безголовые браузеры против “головных”
Когда вы автоматизируете браузер, вам нужно решить, как он должен работать. Обычно выбирают один из двух режимов:
- Headful: Браузер запускается с полным графическим интерфейсом, как и при открытии его человеком. Вы можете видеть окно браузера на своем экране и наблюдать, как ваш скрипт нажимает, набирает текст и перемещается в режиме реального времени. Это полезно для визуального подтверждения того, что ваш сценарий работает так, как ожидалось. Кроме того, это может сделать вашу автоматизацию более похожей на действия реального пользователя для систем защиты от ботов. С другой стороны, запуск браузера с графическим интерфейсом требует больших ресурсов (все мы знаем, как много памяти могут занимать браузеры), что замедляет работу веб-скрептинга.
- Безголовый: Браузер работает в фоновом режиме без видимого интерфейса. Он использует меньше системных ресурсов и работает гораздо быстрее. Это стандарт для производственных браузеров, особенно при запуске сотен параллельных экземпляров на сервере. С другой стороны, если не настроить браузер без графического интерфейса, он может показаться подозрительным. Ознакомьтесь с лучшими безголовыми браузерами на рынке.
Проблемы и решения при браузерном рендеринге
Автоматизация браузера – это только первый шаг при работе с сайтами, перегруженными JavaScript. При работе с такими сайтами вы неизбежно столкнетесь с двумя основными категориями проблем, включая:
- Сложная навигация: Скрипты для скраппинга должны быть не просто исполнителями команд. Вы должны запрограммировать их на обработку всего пути пользователя. Это означает написание кода для скрапирования сложных навигационных потоков, таких как ожидание загрузки нового контента и работа с бесконечной прокруткой. Скрапирование сайтов с большим количеством JavaScript включает в себя работу с многостраничными формами, выпадающими меню и многое другое.
- Обход антибот систем: При неправильном применении автоматизация браузера – это красный флаг, который могут обнаружить антиботы. Чтобы добиться успеха в сценарии скраппинга с помощью средств автоматизации браузера, ваш скраппер должен каким-то образом выглядеть человеком, решая такие задачи, как:
- Отпечатки пальцев браузера: Антиботы анализируют сотни точек данных из браузера клиента, чтобы создать уникальную подпись. Сюда входят строка User-Agent, разрешение экрана, установленные шрифты, возможности рендеринга WebGL и многое другое. Очевидно, что стандартная настройка автоматизации легко идентифицируется. Установка безголового User-Agent – отличный совет. Вам также могут понадобиться специализированные инструменты вроде undetected-chromedriver, которые изменяют несколько параметров браузера, чтобы он выглядел как обычный пользовательский браузер.
- Поведенческий анализ: Антиботы также следят за тем, как скрепер взаимодействует со страницей. Скрипт, нажимающий на кнопку через 5 миллисекунд после загрузки страницы, явно не человек. Если такое поведение будет отмечено как роботизированное, система защиты может вас забанить.
- CAPTCHA: CAPTCHA часто становятся окончательным препятствием для методов скраппинга, основанных на автоматизации браузера. Это происходит потому, что стандартные скрипты автоматизации не могут решить их автономно. Чтобы преодолеть эту проблему, необходимо интегрировать сервисы, решающие CAPTCHA.
Для получения более подробной информации см. наше руководство по соскабливанию динамических сайтов.
Лучшие фреймворки для автоматизации браузеров
Три основных фреймворка для автоматизации браузеров:
- Playwright: Это современный фреймворк от Microsoft. Он разработан с нуля, чтобы справиться со сложностями современных сайтов. Это делает его лучшим выбором для новых проектов по скрапбукингу. Он доступен на JavaScript, Python, C# и Java с поддержкой дополнительных языков, предоставляемой сообществом. Это делает веб-скраппинг с помощью Playwright хорошим выбором для большинства разработчиков.
- Selenium: Это титан веб-автоматизации с открытым исходным кодом. Его главные достоинства заключаются в универсальности. В частности, он поддерживает практически все языки программирования и браузеры, а также имеет широкую и развитую экосистему. Именно поэтому Selenium в основном используется в качестве инструмента автоматизации браузера для скраппинга.
- Puppeteer: Это библиотека, разработанная Google, которая обеспечивает детальный контроль над браузерами Chrome и Chromium черезпротокол CDP(Chrome DevTools Protocol). Теперь она также поддерживает Firefox. С помощью этой библиотеки вы можете выглядеть как обычный пользователь, имитируя поведение пользователя в контролируемом браузере. Благодаря этому Puppeteer широко используется для веб-скрапинга.
Посмотрите, как эти решения (и другие) соотносятся между собой в нашей подборке лучших инструментов автоматизации браузера.
Альтернативный метод: Репликация вызовов AJAX
Вместо того чтобы нести расходы на рендеринг всей визуальной веб-страницы в браузере, вы можете применить детективный подход. Вместо этого вы можете определить прямые вызовы API, которые фронт-энд сайта делает к бэк-энд, и воспроизвести их самостоятельно.
Эти вызовы API обычно возвращают исходные данные, которые сайт впоследствии отображает на странице, поэтому вы можете использовать их напрямую. Эта техника основана на имитации вызовов AJAX и известна как веб-скраппинг API.
Давайте посмотрим, как это работает!
Как работает подход к репликации вызовов AJAX
Репликация AJAX – это практическая техника скраппинга. Основная идея заключается в том, чтобы обойти рендеринг всей страницы, имитируя сетевые запросы (обычно AJAX-вызовы), которые веб-приложение выполняет для получения данных из своего бэкенда.
В общих чертах это включает в себя два основных этапа:
- Подглядывайте: Откройте инструменты разработчика вашего браузера (обычно это вкладка “Сеть” с включенным фильтром “Fetch/XHR”) и взаимодействуйте с сайтом. Проследите, какие вызовы API выполняются в фоновом режиме при загрузке новых данных. Например, во время бесконечной прокрутки или при нажатии кнопки “Загрузить еще”.
- Воспроизведите: Определив нужный API-запрос, обратите внимание на его URL, HTTP-метод (GET, POST и т. д.), заголовки и полезную нагрузку (если она есть). Затем воспроизведите этот запрос в своем скрипте скраппинга, используя HTTP-клиент, например Requests в Python.
Эти конечные точки API обычно возвращают данные в структурированном формате, чаще всего JSON. Это огромное преимущество, поскольку вы можете получить доступ к данным JSON без лишних хлопот, связанных с разбором HTML.
Например, посмотрите на вызов API, сделанный сайтом, который использует бесконечную прокрутку, чтобы загрузить больше данных:
В этом случае вы можете написать простой скрипт, который воспроизведет описанный выше вызов API бесконечной прокрутки, а затем получит доступ к данным.
Основные проблемы при перехвате вызовов AJAX
Когда это работает, такой подход быстр, эффективен и прост. Тем не менее, он сопряжен с некоторыми трудностями:
- Обфусцированные полезные нагрузки: API может требовать зашифрованной полезной нагрузки или не возвращать чистый, читаемый JSON. Это может быть зашифрованная строка, которую определенная функция JavaScript знает, как расшифровать. Это мера по борьбе со скаппингом, требующая обратной разработки.
- Динамические конечные точки и заголовки: Конечные точки API и способы их вызова (например, установка правильных заголовков, добавление нужной полезной нагрузки и т. д.) меняются со временем. Основная проблема такого решения заключается в том, что любое изменение в API приведет к поломке скрепера. Для восстановления работоспособности потребуется обновление кода, что является общей проблемой для большинства (но не для всех, как мы сейчас увидим) подходов к веб-скреппингу.
- TLS fingerprinting: Самые продвинутые антиботы анализируют “рукопожатие TLS”, которое является цифровой подписью программы. Они могут легко отличить запрос от Chrome от запроса от обычного скрипта Python. Чтобы обойти это, нужны специализированные инструменты, способные выдать себя за TLS-подпись браузера.
Современный подход к скраппингу сайтов, перегруженных JavaScript: Браузерные агенты для скрапинга на основе искусственного интеллекта
Описанные до сих пор методы по-прежнему сталкиваются с серьезными проблемами. Более современное решение для скраппинга сайтов, перегруженных JavaScript, требует смены парадигмы. Идея заключается в том, чтобы перейти от написания императивных команд к определению декларативных целей с помощью агентов браузера, управляемых искусственным интеллектом.
Браузер-агент – это браузер, интегрированный с LLM, который понимает содержание, контекст и визуальное оформление страницы. Это в корне меняет подход к веб-скраппингу, особенно для сайтов с большим количеством JavaScript.
Такие сайты обычно требуют сложного взаимодействия с пользователем для загрузки нужных данных. Традиционно для воспроизведения этих взаимодействий в скрипты приходится внедрять логику. Такой подход по своей природе хрупок и требует больших затрат на обслуживание. Проблема в том, что при каждом изменении пользовательского потока необходимо вручную обновлять логику автоматизации.
Благодаря агентам браузера, работающим на основе искусственного интеллекта, вы можете избежать всего этого. Простая описательная подсказка может привести в действие эффективную автоматизацию, которая адаптируется даже при изменении пользовательского интерфейса или потока сайта. Такая гибкость является огромным преимуществом и открывает двери для многих других возможностей автоматизации, поэтому агентский ИИ быстро набирает обороты.
Теперь, какой бы мощной ни была ваша библиотека агентов браузера AI, логика скраппинга все равно зависит от обычных браузеров. Это означает, что вы по-прежнему уязвимы к таким проблемам, как отпечатки пальцев браузера и CAPTCHA. Масштабирование таких решений также становится затруднительным из-за ограничений скорости и запретов IP-адресов.
Настоящее решение – это облачная платформа для скраппинга с поддержкой искусственного интеллекта, которая интегрируется с любой агентской библиотекой и разработана таким образом, чтобы избежать блокировки. Именно такую платформу предоставляет Agent Browser от Bright Data.
Agent Browser позволяет запускать управляемые искусственным интеллектом рабочие процессы на удаленных браузерах, которые никогда не будут заблокированы. Он бесконечно масштабируется, поддерживает режимы headless и headful и работает на базе самой надежной в мире прокси-сети.
Заключение
В этой статье вы узнали, что представляют собой сайты, перегруженные JavaScript, а также общие проблемы и решения для соскабливания данных с них. Каждое из описанных решений имеет свои недостатки, но самым ярким является использование браузера-агента.
Как уже говорилось, Agent Browser от Bright Data позволяет решить все распространенные проблемы со скраппингом, интегрируясь с самыми популярными библиотеками агентского ИИ.
Если вы используете продвинутые агенты искусственного интеллекта, вам нужны надежные инструменты для получения, проверки и преобразования веб-контента. Чтобы получить все эти и другие возможности, изучите инфраструктуру ИИ от Bright Data.
Создайте учетную запись Bright Data и попробуйте все наши продукты и услуги для разработки агентов искусственного интеллекта!