Skip to content

Pipeline for parsing data from auto.drom.ru/archive + collected data

Notifications You must be signed in to change notification settings

zavzyatiy/drom_archive_parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Описание проекта

Последнее обновление проекта: 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 (для эмулирования браузера в случае, когда необходимо взаимодействовать с кнопками на нем).

В коде есть коментарии, хоть и не весьма подробные.

Структура:

  1. Файлы воспроизводятся последовательно по их названиям (zero -> first -> second). Такая процедура позволяет структурировать обращения к сайту и увеличивает скорость парсинга.
  2. zero_stage.ipynb представляет из себя файл для сбора всевозможных ссылок для парсинга конкретного списка автомобилей. Большая часть кода полностью автоматизирована, хотя местами и медленная. Требуется ручное вмешательство только в самом конце обработке ссылок, о чем подробнее написано в самом коде.
  3. first_stage.ipynb представляет из себя файл для асинхронного сбора ссылок на объявления и их даты публикаций на основе того, что полученно в пункте 1. Это сделано потому, что ссылки на конкретные объявления формируются по другому протоколу, нежели ссылки-запросы к базе данных Дрома, с которым мы работаем в пункте 1.
  4. 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, что это и какие в этом тонкости?

  1. Tor - это браузер с особой маршрутизацией запросов. Подробнее про то, как она работает и какую ПОТЕНЦИАЛЬНУЮ ОПАСНОСТЬ для вашего ПК она представляет можно почитать здесь . В России на данный момент сайт Тора заблокирован, но если искать через него НЕЗАПРЕЩЕННЫЕ РЕСУРСЫ (одним из которых является Дром.ру), то за это вы НЕ НЕСЕТЕ НИКАКОЙ ОТВЕТСТВЕННОСТИ.
  2. Скачать можно с официального сайта .
  3. Мосты для браузера можно получить в ОФИЦИАЛЬНОМ телеграмм-боте: @GetBridgesBot .
  4. Добавить мосты себе в браузер: открыть браузер -> в правом верхнем углу нажать на иконку с тремя палочками -> "Настройки" -> "Подключение" -> "Вставить мосты".
  5. Установим в PATH (если все происходит на Windows) путь к .exe файлу Тора: "<директория для установки Тора>\Tor Browser\Browser\TorBrowser\Tor".
  6. Нужно придумать пароль для ControlPort и захэшировать (через терминал): tor --hash-password <пароль>.
  7. В файл, который можно найти вот так: "<директория для установки Тора>\Tor Browser\Browser\TorBrowser\Data\Tor\torrc" (torrc - нужный файл), нужно вставить вот это (файл перед этим можно открыть через Блокнот или Notepad):

ControlPort 9051 HashedControlPassword <закодированный пароль>

  1. Проверить работу браузера и порта можно так: открыть браузер, и в терминале написать команду netstat -an | findstr 9150 (ну и 9051 можно проверить).

Что можно улучшить?

К сожалению, работа программы в некоторых местах предполагает ручные действия. На данный момент таковыми являются:

  • Определение изначального пула автомобилей для парсинга.
  • Ручная дообработка некоторых ссылок на этапе сбора (о чем подробнее в коде).
  • Код не работает в случае, если на этапе первичного парсинга возникают ссылки на спецтехнику (пример: Volvo, долго с ним возился).
  • Создание папок в репозитории для корректной систематизации спаршенных файлов.
  • Отсутствие инструментария для копирования репозитория (я не знаю git).

Также отдельно стоит отметить bottle-neck в разделе первичного сбора ссылок: работа с эмулятором Google Chrome через selenium слишком медленная (хотя и качественно справляется с поставленной задачей). Возможное решение проблемы: перепись под более быстрые библиотеки (например, Playwright).

About

Pipeline for parsing data from auto.drom.ru/archive + collected data

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published