Этот репозиторий содержит скрипт для парсинга данных об объявлениях с сайта auto.ru, а также отчет о встреченных методах защиты от парсинга.
Цель этого задания - написать скрипт на Python для получения данных об объявлениях с сайта auto.ru и проанализировать защиту от парсинга. Скрипт должен принимать на вход URL страницы с объявлением и возвращать марку, модель, пробег и цену транспортного средства.
Для запуска необходимо скачать ChromeDriver и указать до него абсолютный путь в .env файле.
Далее необходимо выполнить следующие команды:
pipenv install
pipenv run python src/parser.py <URL>В ходе выполнения задания были обнаружены следующие методы защиты от парсинга на сайте auto.ru:
-
Капча: Сайт auto.ru использует капчу для проверки, что пользователь является человеком. Капча представляет собой форму, которая требует подтвердить, что вы не являетесь роботом для продолжения работы с сайтом. Сайт показывает её каждый раз, когда в браузере отключён JS или если много запросов идёт с одного IP адреса.
-
Согласие с политикой конфиденциальности: При отправке большого количества запросов с одного IP-адреса, сайт может попросить вас согласиться с обработкой данных в соответствии с их политикой конфиденциальности. Пример подобной формы:
- Запуск браузера в режиме "headless": Запуск браузера в режиме "headless" означает, что браузер работает без отображения графического интерфейса, что в теории может увеличить скорость работы скрипта, но приводит к обфускации данных.
Для успешного выполнения парсинга, были применены следующие подходы к обходу методов защиты:
-
Капча: Для обхода капчи необходимо нажать на определённый элемент.
-
Согласие с политикой конфиденциальности: Для обхода этого способа защиты так же необходимо нажать на определённый элемент.
-
Запуск браузера в режиме "headless": Для решения этой защиты необходимо использовать Selenium, без указания параметра "--headless".
При выполнении задания, не были обнаружены следующие методы защиты на сайте auto.ru:
-
Фильтрация IP на основе местоположения: Некоторые сайты могут применять фильтрацию IP на основе географического местоположения. Таким образом, запросы от определенных стран или регионов могут быть заблокированы или ограничены. Это позволяет сайтам снизить нагрузку от запросов из определенных мест и сосредоточиться на обслуживании посетителей из других регионов.
-
Регистрация и авторизация пользователей: Некоторые сайты могут ограничивать доступ к данным или функционалу только зарегистрированным пользователям. Таким образом, для доступа к определенным страницам или данным может потребоваться авторизация через логин и пароль или использование токенов/ключей API.
-
Изменение DOM: Некоторые сайты могут использовать JavaScript для изменения DOM (Document Object Model) после загрузки страницы. Это позволяет динамически изменять структуру и содержание страницы, что усложняет парсинг. Такие изменения могут происходить после загрузки страницы или в ответ на действия пользователя.
-
Динамические имена классов: Некоторые сайты могут применять динамические имена классов для HTML элементов. Это может усложнить идентификацию нужных элементов для парсинга, так как классы могут меняться при каждой загрузке страницы или при динамических изменениях на сайте.
-
Информация в картинке: Некоторые сайты могут представлять информацию, которую нужно извлечь, в виде изображений, например, номер телефона или адрес электронной почты. Это предотвращает автоматический парсинг, так как текст на изображении не может быть прочитан стандартными методами.
Данный скрипт может использоваться исключительно в образовательных или ознакомительных целях. Использование данного скрипта для массового или автоматического сбора данных с сайта может нарушать правила использования сайта auto.ru.
