Разработка парсера с китайского источника для каталога автомобилей

Разработка парсера с китайского источника для каталога автомобилей

Стек технологий:
Redis RedisDocker DockerPython PythonPostgreSQL PostgreSQL
Планируете похожий сайт? Обсудим проект
Обсудим проект - персона проекта

Задача: свой каталог без ручного переноса объявлений

Клиенту требовался собственный каталог автомобилей на сайте, который автоматически получает данные с китайского сайта объявлений che168.com, переводит их на русский, обрабатывает фотографии и поддерживает каталог в актуальном состоянии.

Главная задача была не просто «скачать объявления». Нужно было построить систему, которая работает постоянно: находит новые автомобили, обновляет данные, обрабатывает ошибки и передаёт готовые карточки в каталог без ежедневного участия менеджера.

Поэтому вместо обычного скрипта мы разработали полноценную систему автоматизации. В ней каждый этап отвечает за свою часть работы, а сбой одного компонента не останавливает работу и не рушит всю систему.

Не просто парсер, а система из 7 программ

Система состоит из семи независимых компонентов:

  • парсер — получает данные с сайта-источника;
  • переводчик — переводит описания и характеристики;
  • обработчик фотографий — собирает и оптимизирует изображения;
  • калькулятор — считает корректно стоимость с учетом конвертации валюты, таможенный, транспортных, утиль и иных сборов, позволяя клиенту самостоятельно менять параметры расчёта при изменении условий;
  • публикатор — передаёт готовые карточки в WooCommerce;
  • планировщик — управляет очередностью и регулярностью задач;
  • API для админки — связывает систему с панелью управления.

Между компонентами используются очереди Redis. Поэтому, если, например, временно недоступен переводчик, уже обработанные автомобили не останавливаются: другие этапы продолжают работать, а незавершённые задачи ждут своей очереди.

Это принципиальное отличие от простого «парсера в одном файле», который приходится запускать заново после каждого серьёзного сбоя.

Умный парсер для товаров и каталогов

Как обходим блокировки китайского сайта

Автоматически собирать большие объёмы данных с крупного сайта непросто. che168 использует антибот-защиту, поэтому система отслеживает сразу несколько признаков блокировки: сетевые ошибки, HTTP 403/429/503, капчу, скрытые проверки браузера и подозрительно короткие ответы.

Чтобы система могла продолжать работу, используются:

  • ротация прокси;
  • случайные паузы между запросами;
  • перемешивание порядка страниц;
  • автоматическая пауза для проблемного IP;
  • ограниченное количество попыток;
  • карантин страниц, которые не удалось получить.

Например, после трёх ошибок подряд конкретный адрес автоматически убирается из работы на заданное время. А проблемная страница отправляется в карантин и периодически проверяется повторно. Все эти настройки доступны из панели управления.

Получается не гонка «скачать всё как можно быстрее», а система, рассчитанная на стабильную работу в долгую.

Оригинальная система перевода

перевод, который становится точнее со временем

Проведя анализ, команда разработки пришла к заключению, что просто отправлять каждое описание и название автомобиля в Google Translate не лучшее решение. Автомобильные комплектации и технические термины требуют более внимательного подхода с возможностью уточнения и редактирования перевода.

Поэтому сделали трёхступенчатую систему:

  1. сначала используется собственный словарь уже проверенных переводов;
  2. если точного совпадения нет, система пытается собрать фразу из известных частей;
  3. только оставшийся непереведённый текст отправляется в Google Translate.

Новые фразы сохраняются в отдельный словарь. При необходимости менеджер может отредактировать перевод, после чего система будет использовать его в дальнейшем. Есть и массовое обновление: если словарь изменили, переводы уже существующих карточек можно опубликовать одной кнопкой.

Изображения: тоже отдельная задача

У автомобиля может быть большая галерея — обычно 20–30 фотографий, иногда около 40. Поэтому система не ограничивается миниатюрой из списка объявлений.

Сначала она пытается получить полную галерею с детальной страницы автомобиля. Если страница временно недоступна, используются запасные источники — миниатюра или ранее сохранённая ссылка на фотографию.

Изображения автоматически приводятся к единому формату JPEG и оптимизируются по размеру, чтобы не перегружать систему оригиналами изображений, которые могут достигать существенных объемов и негативно сказываться на скорости загрузки страницы. Еще важный нюанс: повторно одинаковые фотографии не загружаются, поэтому каталог не превращается в склад бесполезных копий.

Публикация в WooCommerce без хаоса

После обработки автомобиль попадает в каталог WooCommerce.

Здесь особенно важны несколько правил:

  • товар определяется по уникальному SKU, поэтому дубли не создаются;
  • ручные действия менеджера не перезаписываются автоматикой;
  • новые автомобили сначала появляются как черновики;
  • цена рассчитывается самим сайтом по единой формуле;
  • автомобиль, временно исчезнувший с источника, сначала получает статус «снят с продажи», а не удаляется сразу.

Если объявление появляется снова, карточка может автоматически вернуться в прежний статус вместе с накопленной историей.

Всё управление — в одной панели

Чтобы для работы с системой не требовался программист, мы разработали отдельную панель управления парсера и калькулятора.

Менеджер видит:

  • работает система или стоит на паузе;
  • сколько автомобилей находится на каждом этапе;
  • что сейчас находится в очереди;
  • журнал активности;
  • состояние прокси;
  • скорость обхода;
  • словарь переводов.

Причём технические ошибки переведены на понятный русский язык. Менеджеру не нужно разбираться, что означает JS challenge detected: система объясняет, что сайт показал проверку вместо результатов.

Для работы с инструментом также была подготовлена простая инструкция.

Калькулятор растаможки

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

В расчёте учитываются стоимость автомобиля, конвертация валюты, таможенная пошлина, акциз, НДС, утилизационный сбор и сбор за таможенное оформление. Переменные и формулы доступны для изменения через панель управления без привлечения программиста.

Это позволяет бизнесу самостоятельно менять параметры расчёта при изменении условий, не переделывая код сайта.

Результат

В рамках проекта спарсено и переведено 300 000 карточек автомобилей. Данные автоматически обрабатываются, переводятся, фотографии приводятся к единому виду, а готовые автомобили передаются в каталог.

Дополнительно в бизнес-расчётах учитываются конвертация валюты, таможенные платежи, НДС, утилизационный сбор, транспортные расходы и комиссия продавца.

Главное — каталог больше не требует постоянного ручного переноса данных. Система самостоятельно проходит источник, обрабатывает новые автомобили и поддерживает каталог в актуальном состоянии.

Кому может пригодиться такой парсер?

Такой подход подходит не только для наши автомобилей. Если бизнес регулярно переносит большие объёмы информации с одного сайта на другой, можно написать парсер сайта под конкретную задачу.

Например:

  • парсер товаров и каталогов;
  • парсер для маркетплейсов;
  • парсер объявлений;
  • парсер цен на маркетплейсах;
  • парсеры интернет-магазинов;
  • парсер данных сайтов для внутренней аналитики.

Вместо универсального сервиса можно разработать собственную систему с нужными интеграциями, правилами обработки и настройками.

Нужно автоматизировать сбор данных?

Мы занимаемся разработкой парсеров под конкретные бизнес-задачи: от простого сбора данных до полноценной системы с переводом, обработкой товаров, интеграцией с сайтом и панелью управления.

Если вам нужно заказать парсер, сделать парсер сайта или разобраться, как автоматизировать сбор данных с конкретного источника — расскажите о задаче. Обсудим источник, объём данных и нужный результат и предложим подходящий вариант реализации.

Заказать разработку парсера