Последнее обновление проекта: 29.01.2025.
Данный парсер предназначен для сбора информации по архивным объявлениям, представленным на сайте Дром.ру - крупнейшей в России онлайн-платформе, агрегирующей предложение на вторичном рынке автомобилей, через которую проходит до 60% соответстующего трафика. Собранный датасет:
Всего собранных наблюдений: 5.369.803. Данные содержат объявления с 2018 по 2023 год, кроме указания региона и "макро-региона" данные не предобрабатывались. Ссылка на Kaggle, ссылка на HF. Пояснения к содержанию колонок датасета даны на Kaggle.
Контекст:
Ниже в тексте я использую следующие определения: cсылка - это определенным образом сконструированный url, в ответ на который выдача сайта возвращает упорядоченный по дате (или как-то иначе, но нас интересует дата) список удовлетворяющий запросу набор объявлений , то есть конкретных публикаций продающихся автомобилей. Сайт представляет из себя (по ощущениям) большую SQL таблицу, работа с которой осложняется тем, что по любому из запросов сайт выдает 400 первых объявлений (если быть точным 20 объявлений на 20 страницах). Для обхода такой неприятности и был написан этот парсер. "Под капотом" у парсера - Async I/O (Дром.ру очень быстро начинает блокировать автоматизированные запросы через специальную задержку или 429 ответ сайта), Stem и Requests[SOCKS] (для возможности смены IP-адресов при блокировании со стороны сайта), набор библиотек для HTML-парсинга (lxml, Beutiful Soup) и Selenium (для эмулирования браузера в случае, когда необходимо взаимодействовать с кнопками на нем).
В коде есть коментарии, хоть и не весьма подробные.
Структура:
- Файлы воспроизводятся последовательно по их названиям (zero -> first -> second). Такая процедура позволяет структурировать обращения к сайту и увеличивает скорость парсинга.
- zero_stage.ipynb представляет из себя файл для сбора всевозможных ссылок для парсинга конкретного списка автомобилей. Большая часть кода полностью автоматизирована, хотя местами и медленная. Требуется ручное вмешательство только в самом конце обработке ссылок, о чем подробнее написано в самом коде.
- first_stage.ipynb представляет из себя файл для асинхронного сбора ссылок на объявления и их даты публикаций на основе того, что полученно в пункте 1. Это сделано потому, что ссылки на конкретные объявления формируются по другому протоколу, нежели ссылки-запросы к базе данных Дрома, с которым мы работаем в пункте 1.
- second_stage.ipynb представляет из себя файл для формирования итоговых таблиц со спаршенными данными. На этом этапе мы получаем чистые данные для дальнейшего анализа (нам они нужны для эконометрического исследования, о котором, возможно, будет сказано здесь отдельно, когда оно будет дописано, с приложением необходимого кода).
Комментарии:
- Для second_stage.ipynb критично наличие файла 03_all_cities.xlsx, прикрепленного к проекту. Этот файл я нашел на просторах Интернета для идентификации регионов городов, для которых сам Дром иногда в объявлениях не предоставляет полную информацию.
- Предполагается, что для работы на своем устройстве пользователь загрузит из проекта все три файла в некоторую папку с подпапками "./cars", "./cars/href", "./second_href", "./all_cars".
- Также предполагается наличие у пользователя браузера Google Chrome в директории "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" (нужно для файла zero_stage.ipynb) и установленного Tor Browser на компьюетере (об установке и настройке отдельно ниже).
- Tor - это браузер с особой маршрутизацией запросов. Подробнее про то, как она работает и какую ПОТЕНЦИАЛЬНУЮ ОПАСНОСТЬ для вашего ПК она представляет можно почитать здесь . В России на данный момент сайт Тора заблокирован, но если искать через него НЕЗАПРЕЩЕННЫЕ РЕСУРСЫ (одним из которых является Дром.ру), то за это вы НЕ НЕСЕТЕ НИКАКОЙ ОТВЕТСТВЕННОСТИ.
- Скачать можно с официального сайта .
- Мосты для браузера можно получить в ОФИЦИАЛЬНОМ телеграмм-боте: @GetBridgesBot .
- Добавить мосты себе в браузер: открыть браузер -> в правом верхнем углу нажать на иконку с тремя палочками -> "Настройки" -> "Подключение" -> "Вставить мосты".
- Установим в PATH (если все происходит на Windows) путь к .exe файлу Тора: "<директория для установки Тора>\Tor Browser\Browser\TorBrowser\Tor".
- Нужно придумать пароль для ControlPort и захэшировать (через терминал):
tor --hash-password <пароль>
. - В файл, который можно найти вот так: "<директория для установки Тора>\Tor Browser\Browser\TorBrowser\Data\Tor\torrc" (torrc - нужный файл), нужно вставить вот это (файл перед этим можно открыть через Блокнот или Notepad):
ControlPort 9051
HashedControlPassword <закодированный пароль>
- Проверить работу браузера и порта можно так: открыть браузер, и в терминале написать команду
netstat -an | findstr 9150
(ну и 9051 можно проверить).
К сожалению, работа программы в некоторых местах предполагает ручные действия. На данный момент таковыми являются:
- Определение изначального пула автомобилей для парсинга.
- Ручная дообработка некоторых ссылок на этапе сбора (о чем подробнее в коде).
- Код не работает в случае, если на этапе первичного парсинга возникают ссылки на спецтехнику (пример: Volvo, долго с ним возился).
- Создание папок в репозитории для корректной систематизации спаршенных файлов.
- Отсутствие инструментария для копирования репозитория (я не знаю git).
Также отдельно стоит отметить bottle-neck в разделе первичного сбора ссылок: работа с эмулятором Google Chrome через selenium слишком медленная (хотя и качественно справляется с поставленной задачей). Возможное решение проблемы: перепись под более быстрые библиотеки (например, Playwright).