Парсинг сайтов: когда становится сложнее, чем просто «скачать страницу»


Парсинг сайтов, когда-то считавшийся относительно простой задачей, становится все более и более сложным. Веб-разработчики применяют все новые и новые методы для защиты своих данных от автоматизированного сбора, заставляя "парсеров" имитировать поведение человека все точнее.



Имитация человека: от простых запросов к сложным сценариям

Раньше достаточно было просто отправить HTTP-запрос и получить HTML-страницу. Но теперь сайты требуют от грабберов имитации более естественного поведения:

  • JavaScript: Многие сайты используют JavaScript для динамической загрузки контента. Простой парсинг HTML больше не работает – нужно запускать JavaScript, чтобы получить полную страницу.
  • Куки и сессии: Сайты отслеживают пользователей с помощью куки и сессий. Парсер должен имитировать это поведение, сохраняя и передавая куки, чтобы не вызвать подозрений.
  • Проверка CAPTCHA: Сайты используют CAPTCHA для защиты от автоматизированных запросов. Парсер должен уметь распознавать и вводить CAPTCHA, что значительно усложняет задачу.
  • Адаптивный дизайн: Сайты адаптируются под разные устройства и браузеры. Иногда парсер должен имитировать поведение конкретного устройства, чтобы получить корректный контент.
Безголовые браузеры: не панацея, а лишь инструмент

Безголовые браузеры, такие как Puppeteer или Selenium, позволяют запускать JavaScript и имитировать взаимодействие с сайтом. Однако они не являются панацеей:

  • Замедление работы: Запуск браузера и выполнение JavaScript значительно замедляет работу парсера по сравнению с простым HTTP-запросом.
  • Обнаружение: Сайты могут обнаруживать безголовые браузеры и блокировать доступ.
  • Сложность: написание кода для управления браузером – это задача несколько сложнее, чем запрос страницы на PHP.
  • Ресурсы: установка, например, селениума, требует VPS и желательно не самой дешевой конфигурации.
Простой пример

Попросил заказчик спарсить сайт федресурс – собрать данные по обременениям (лизингу), находящиеся в открытом доступе. Если посмотреть на сайт (fedresurs.ru/encumbrances), то сразу будет видно, что для поиска требуется выполнять JS – то есть необходим, чтобы было на чем его выполнять. Иным словами браузер – хотя бы безголовый.

Создаем проект на Java, подключаем необходимые библиотеки селениума, пробуем спарсить страницу отдельного договора. Да, все получается, нет капчи и защиты (понятно, что не все защиты обнаруживаются сразу, но если делать не агрессивный, а медленный парсинг, то чаще всего можно долго и успешно собирать необходимую информацию. Как паучок).

Пробуем получить список обременений (урлов) через поиск, но тут вылезает интересная проблема - их нет, этих урлов – они формируются в момент клика. Точнее, не так. Список урлов появляется после поиска, но хранится в памяти браузера и не выводится на странице при формировании html.

Здесь можно пойти двумя путями. Первый – залезть в память браузера и извлечь оттуда необходимую информацию. Второй – открывать ссылки поочередно и забирать адреса оттуда.

В любом случае это затрудняет процесс сбора информации, делает его еще более долгим.

Выводы

Парсинг сайтов становится все более сложной задачей, требующей от разработчиков парсеров все большего мастерства и изобретательности. Необходимость имитации человеческого поведения, запуск JavaScript, работа с куки и сессиями, распознавание CAPTCHA – все это усложняет процесс сбора данных. Безголовые браузеры, хоть и помогают, но не решают проблему полностью. Разработчикам парсеров приходится идти на компромиссы между скоростью, надежностью и стоимостью. Иногда заказчику бывает дешевле нанять студента для разового сбора информации, чем платить мне за разработку инструмента.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, парсинг




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Работа с ini на C#
Откуда реклама на сайте?
Автоматическое пополнение через ЯндексДеньги на сайт, или HTTP-уведомления