No description
- Go 90.6%
- Go Template 9.1%
- Makefile 0.3%
| modules | Новый селектор для описания | |
| templates | Логи в кеш | |
| .gitignore | Переименование репозитория | |
| config.yaml.example | Прокси | |
| go.mod | Новая версия | |
| go.sum | Обновления и фиксы | |
| main.go | Переименование репозитория | |
| Makefile | Фикс Makefile | |
| README.md | Readme | |
AutoRU — Парсер объявлений auto.ru
AutoRU — это программа на Go для автоматического сбора объявлений о продаже автомобилей с сайта auto.ru. Она отслеживает новые объявления, фильтрует их по ключевым словам, извлекает номера телефонов продавцов и предоставляет веб-интерфейс для просмотра и выгрузки данных.
Возможности
- Автоматический сбор объявлений — обходит страницы каталога (до 99 страниц) с помощью headless Chrome.
- Фильтрация по ключевым словам — проверяет описание каждого объявления на вхождение заданных пользователем слов.
- Извлечение телефонов — получает номер продавца через внутреннее API auto.ru (мобильный эндпоинт).
- Дедупликация — уже обработанные объявления повторно не собираются.
- Веб-панель — интерфейс на Bootstrap для управления ключевыми словами и скачивания CSV.
- Экспорт в CSV — выгрузка собранных данных за выбранный период в кодировке Windows-1251.
- Поддержка прокси — возможность указать SOCKS5-прокси для обхода блокировок.
- Режимы работы —
prod(парсер + веб-сервер) иlocal(только веб-сервер).
Как это работает
- Парсер открывает страницу каталога auto.ru через headless Chrome (chromedp).
- Собирает ссылки на все объявления на странице.
- Переходит по каждой ссылке и читает описание автомобиля.
- Если описание содержит хотя бы одно из заданных ключевых слов (регистронезависимо), отправляет POST-запрос к мобильному API auto.ru для получения телефона продавца.
- Сохраняет данные (ссылку, имя продавца, телефон) в SQLite.
- Циклически переходит к следующей странице и повторяет процесс (до 99 страниц, затем начинает заново).
Технологии
| Компонент | Технология |
|---|---|
| Язык | Go 1.24 |
| Веб-фреймворк | Gin |
| Headless-браузер | chromedp |
| Парсинг HTML | goquery |
| База данных | SQLite (GORM) |
| Конфигурация | cleanenv (YAML) |
| UI | Bootstrap 5.2 |
Установка и запуск
Требования
- Go 1.24+
- Google Chrome или Chromium
- (Опционально) SOCKS5-прокси
Быстрый старт
# 1. Склонировать репозиторий
git clone https://codeberg.org/adikalon-work/auto-ru
cd auto-ru
# 2. Создать конфигурационный файл
cp config.yaml.example config.yaml
# 3. Настроить config.yaml (см. раздел Конфигурация)
# 4. Запустить миграцию базы данных
make migrate
# 5. Запустить приложение
make run
После запуска откройте http://localhost:3000.
Команды Makefile
make build # Собрать бинарник
make run # Собрать и запустить
make migrate # Собрать и выполнить миграции БД
Конфигурация
Файл config.yaml:
port:3000# Порт веб-сервераenv: local # Режим:"local"(только веб) или "prod" (парсер + веб)proxy:socks5://localhost:8080 # SOCKS5-прокси (оставьте пустым, если не нужен)Использование
Веб-интерфейс
| Маршрут | Описание |
|---|---|
GET / |
Главная страница с формой ключевых слов и формой выгрузки CSV |
POST /keys |
Сохранить ключевые слова для фильтрации |
POST /download |
Скачать CSV с данными за выбранный период |
Ключевые слова указываются через запятую (например: битый, не бьтый, после дтп).
Парсер
В режиме prod парсер запускается в фоновом потоке сразу после старта сервера. Он работает в бесконечном цикле, проходя страницы с 1 по 99. При ошибке делает паузу на 5 секунд и продолжает.
Для миграции базы данных используйте флаг -m:
./auto-ru -m
Структура проекта
auto-ru/
├── main.go # Точка входа
├── config.yaml # Конфигурация (не в git)
├── config.yaml.example # Пример конфигурации
├── Makefile # Команды сборки
├── go.mod / go.sum # Go-модули
├── modules/
│ ├── config/
│ │ ├── config.go # Вспомогательные константы
│ │ └── yaml.go # Загрузчик YAML-конфига
│ ├── database/
│ │ └── database.go # Слой работы с SQLite
│ ├── logger/
│ │ └── logger.go # Логирование с кэшированием в БД
│ ├── migrate/
│ │ └── migrate.go # Автомиграция схемы БД
│ ├── models/
│ │ ├── cache.go # Модель кэша (ключ-значение)
│ │ ├── data.go # Модель собранных данных
│ │ └── parsed.go # Модель обработанных ссылок
│ ├── parser/
│ │ ├── parser.go # Ядро парсера
│ │ └── helper.go # Вспомогательные функции
│ ├── structures/
│ │ └── seller.go # Структуры JSON-ответа API
│ └── web/
│ ├── web.go # Настройка веб-сервера
│ └── controller.go # HTTP-обработчики
└── templates/
└── index.tmpl # HTML-шаблон
Примечания
- Парсер требует установленного Chrome/Chromium в системе.
- Для снижения риска блокировки рекомендуется использовать SOCKS5-прокси.
- Все данные хранятся локально в файле
database.db.