Парсер собирает товары и цены по категориям для lenta.com в серверном режиме:
- выбор магазина по городу/адресу (
-city); - обязательная работа через прокси (
-proxyили-proxy-list); - ротация прокси + retry/backoff;
- healthcheck пула прокси;
- сбор из JSON API (без HTML-селекторов);
- выгрузка в
json,csvили сразу в оба формата (all); - service mode с endpoint'ами
/healthи/scrape.
go run ./cmd/parser \
-proxy-list proxies.txt \
-city "Москва" \
-categories "молоко,хлеб" \
-limit 20 \
-max-retries 4 \
-retry-base-ms 800 \
-timeout-sec 30 \
-format all \
-out output/products.json# proxies.txt
http://user:pass@proxy-1.example.com:8080
http://user:pass@proxy-2.example.com:8080
http://user:pass@proxy-3.example.com:8080go run ./cmd/parser \
-proxy-list proxies.txt \
-city "Москва" \
-categories "молоко,хлеб" \
-healthcheck-onlygo run ./cmd/parser \
-proxy-list proxies.txt \
-city "Москва" \
-categories "молоко,хлеб" \
-format all \
-out output/products.json \
-serve \
-listen ":8080"Endpoints:
GET /health- проверка состояния сервиса и прокси-пулаPOST /scrape- запуск сбора и выгрузки в файл
docker build -t grocery-parser .
docker run --rm -p 8080:8080 \
-v "$(pwd)/proxies.txt:/app/proxies.txt:ro" \
-v "$(pwd)/output:/app/output" \
grocery-parser \
-proxy-list /app/proxies.txt \
-city "Москва" \
-categories "молоко,хлеб" \
-format all \
-out /app/output/products.json \
-serve \
-listen ":8080"Каждая запись:
name- название товараprice- ценаurl- ссылка на товарcategory- категория, по которой товар попал в выгрузку
- Некоторые магазины используют антибот-защиту. Для боевого запуска нужен стабильный proxy pool и регулярная замена невалидных прокси.
- В коде используется обход JSON-структур и извлечение по множеству ключей (
name/title,price/currentPrice/...) - это снижает зависимость от точной схемы ответа API.