update readme and env
This commit is contained in:
20
README.md
20
README.md
@@ -6,6 +6,8 @@
|
||||
|
||||
По умолчанию работает последовательно одна машина за раз, с паузами между запросами.
|
||||
|
||||
JSON-результаты CLI по умолчанию сохраняются в `artifacts/json/`, чтобы не засорять корень проекта.
|
||||
|
||||
## Что делает
|
||||
|
||||
1. Открывает страницу листинга `Vehiclelisting/Cars`, собирает ссылки на карточки.
|
||||
@@ -77,6 +79,7 @@ SQLite подходит для локальной отладки, но не дл
|
||||
|
||||
- запуск раз в **1 час**
|
||||
- лимит **30 машин за цикл**
|
||||
- обрабатываются только **новые авто** (по умолчанию `IAAI_SYNC_ONLY_NEW=true`)
|
||||
|
||||
Это уже отражено в актуальных env-настройках.
|
||||
|
||||
@@ -91,6 +94,16 @@ IAAI использует anti-bot / fraud protection.
|
||||
- Chromium **не поддерживает SOCKS5 с аутентификацией напрямую**
|
||||
- поэтому для 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
|
||||
@@ -117,10 +130,10 @@ IAAI_PROXY_PASSWORD=password
|
||||
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 одной карточки
|
||||
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 + запись в БД
|
||||
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
|
||||
|
||||
# при необходимости можно принудительно отключить фильтр only-new
|
||||
python main.py sync-listing --limit 30 --only-new false
|
||||
|
||||
# daemon-режим (цикл каждые N минут)
|
||||
python main.py run-daemon --interval 60
|
||||
```
|
||||
|
||||
@@ -7,7 +7,9 @@ from typing import Any, Iterable
|
||||
|
||||
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user