update readme and env

This commit is contained in:
qananasikq
2026-04-08 18:33:56 +03:00
parent 64b7c760d9
commit 90bd4756b3
2 changed files with 21 additions and 3 deletions

View File

@@ -6,6 +6,8 @@
По умолчанию работает последовательно одна машина за раз, с паузами между запросами. По умолчанию работает последовательно одна машина за раз, с паузами между запросами.
JSON-результаты CLI по умолчанию сохраняются в `artifacts/json/`, чтобы не засорять корень проекта.
## Что делает ## Что делает
1. Открывает страницу листинга `Vehiclelisting/Cars`, собирает ссылки на карточки. 1. Открывает страницу листинга `Vehiclelisting/Cars`, собирает ссылки на карточки.
@@ -77,6 +79,7 @@ SQLite подходит для локальной отладки, но не дл
- запуск раз в **1 час** - запуск раз в **1 час**
- лимит **30 машин за цикл** - лимит **30 машин за цикл**
- обрабатываются только **новые авто** (по умолчанию `IAAI_SYNC_ONLY_NEW=true`)
Это уже отражено в актуальных env-настройках. Это уже отражено в актуальных env-настройках.
@@ -91,6 +94,16 @@ IAAI использует anti-bot / fraud protection.
- Chromium **не поддерживает SOCKS5 с аутентификацией напрямую** - Chromium **не поддерживает SOCKS5 с аутентификацией напрямую**
- поэтому для production желательно покупать прокси, который отдаёт именно HTTP/HTTPS доступ - поэтому для production желательно покупать прокси, который отдаёт именно HTTP/HTTPS доступ
Если используется встроенный bridge `iaai_scraper/proxy_bridge.py` (HTTP/HTTPS → SOCKS5),
в нём добавлены базовые меры стабильности:
- корректное чтение request body через `rfile`
- поддержка `Transfer-Encoding: chunked` для request body
- базовое логирование запросов и ошибок
- таймауты relay-соединений
- ограничение числа рабочих потоков (`PROXY_BRIDGE_MAX_WORKERS`)
- безопасный ответ `502 Bad Gateway` без утечки внутренних исключений
Пример: Пример:
```env ```env
@@ -117,10 +130,10 @@ IAAI_PROXY_PASSWORD=password
python main.py init-db python main.py init-db
# собрать ссылки из листинга # собрать ссылки из листинга
python main.py collect-listing --make Toyota --model Camry --output listing.json python main.py collect-listing --make Toyota --model Camry --output artifacts/json/listing.json
# scrape одной карточки # scrape одной карточки
python main.py scrape-vehicle "https://www.iaai.com/VehicleDetail/41180634~US" --output result.json python main.py scrape-vehicle "https://www.iaai.com/VehicleDetail/41180634~US" --output artifacts/json/result.json
# scrape + запись в БД # scrape + запись в БД
python main.py sync-vehicle "https://www.iaai.com/VehicleDetail/41180634~US" --lane iaai python main.py sync-vehicle "https://www.iaai.com/VehicleDetail/41180634~US" --lane iaai
@@ -128,6 +141,9 @@ python main.py sync-vehicle "https://www.iaai.com/VehicleDetail/41180634~US" --l
# массовая синхронизация листинга # массовая синхронизация листинга
python main.py sync-listing --make Toyota --model Camry --lane iaai_cars --limit 30 python main.py sync-listing --make Toyota --model Camry --lane iaai_cars --limit 30
# при необходимости можно принудительно отключить фильтр only-new
python main.py sync-listing --limit 30 --only-new false
# daemon-режим (цикл каждые N минут) # daemon-режим (цикл каждые N минут)
python main.py run-daemon --interval 60 python main.py run-daemon --interval 60
``` ```

View File

@@ -7,7 +7,9 @@ from typing import Any, Iterable
def save_to_json(data: Any, filename: str | Path) -> None: def save_to_json(data: Any, filename: str | Path) -> None:
Path(filename).write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8") path = Path(filename)
path.parent.mkdir(parents=True, exist_ok=True)
path.write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
def short_sleep(a: float = 0.10, b: float = 0.35) -> None: def short_sleep(a: float = 0.10, b: float = 0.35) -> None: