Skip to content

TT1410/autoria-sraper

Repository files navigation

AutoRia Scraper

Опис виконання завдання

🔗Посилання на ТЗ

Стартове посилання

В ТЗ було вказане стартове посилання: https://auto.ria.com/car/used/ (за замовчуванням відображає 10-20 елементів на сторінці, задати кількість не можливо).

Переглянувши, як працює AutoRia, мною було вирішено використати посилання: https://auto.ria.com/uk/search/, оскільки воно дає можливість використовувати query фільтри для пошуку авто та вказувати кількість елементів на сторінці, що значно пришвидшує роботу програми. Оскільки вказавши максимальну кількість (100) елементів на сторінці, кількість сторінок суттєво(!) зменшується.

Опис query фільтрів, використаних для пошуку авто:

filters = {
    "indexName": "auto", # Б/У автомобілі
    "sort[0].order": "dates.created.desc", # Спочатку нові оголошення
    "dates.sold.not": "0000-00-00%2000:00:00", # Приховати продані авто
    "size": 100, # Відображати 100 елементів на сторінці
    "page": 0, # Сторінка
}

Поля бази даних

В ТЗ не було вказано, чи повинні оголошення бути унікальними в БД, але це наче є логічним. В ідеалі я би додав ще одне поле auto_id, оскільки кожне оголошення на сайті має свій унікальний ID, але щоб не додавати додаткове поле, я зробив унікальним посилання (кожне посилання на авто є унікальним, оскільки на кінці посилання є вказаний той самий auto_id).

Тобто при кожному новому скрапінгу, в БД додаютсья лише нові оголошення, старі остаються незмінними. Видалені оголошення також пропускаються

Конфліктні поля:

  • odometer: int, або Null, якщо пробіг не вказаний (так, чомусь навіть Б/У авто є без пробігу).
  • username: str, або Null, якщо імʼя продавця/назва компанія не вказана.
  • phone_number: int - структура була заявлена +38063……, але оскільки це число, то в БД номер зберігається без +.
  • image_url: str, або None, якщо в оголошенні немає жодного фото.
  • car_number: str, або None, якщо номерний знак не вказаний в оголошенні.
  • car_vin: str, але він є не у всіх оголошеннях. При скрапінгу такі оголошення пропускаються (не записуютсья в БД), оскільки за моїми спостереженнями без VIN-номеру в основному лише йдуть причіпи, катери тощо.

Що стосується номеру телефону продавця, то він отримується за допомогою АПІ запиту із певними параметрами (їх можна знайти в HTML оголошення), цей запит я відслідкував у браузері, коли натискається кнопка Показати (показати повністю номер телефону). В БД записується лише основний номер телефону, але їх буває декілька.

Підсумок

Тестове завдання виконане згідно усіх умов:

  1. Програма запускається щодня о 12:00, заходить у карточку кожного Б/У авто та записує його в БД - PostgreSQL.
  2. Програма щодня о 00:00 виконує дамп БД та зберігає його до каталогу /dumps.
  3. Програма та база даних розгортаються за допомогою docker-compose.

Звичайно, можна було використати Selenium, та отримувати номер телефону звичайним "кліком" по кнопці, але тоді довелось би пожертвувати швидкістю роботи програми:)

About

Scraping used cars with AutoRia

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published