avito-sdk
Высокопроизводительная библиотека и SDK для работы с Avito без GUI.
Разработана ключевым контрибьюторомDuff89/parser_avito.
🚀 Возможности
- 🚀 100% Headless и легкий вес: Никаких оконных библиотек (Tkinter, CustomTkinter, Flet, PyInstaller). Работает прямо в Linux, Docker, AWS, Raspberry Pi, macOS и Windows.
- ⚡ Asyncio и Синхронный режим:
AsyncAvitoClientдля высоконагруженных Telegram-ботов (Aiogram 3, Telethon), FastAPI, иAvitoClientдля простых скриптов. - 📉 Отслеживание изменения цен (PR #334 / Issue #214): Автоматическая фиксация старой цены, вычисление снижения цены (
price_drop) и ведение истории в SQLite. - 👤 Извлечение данных продавца (PR #334 / Issue #333): Сбор имени продавца (
seller_name) и slug/ID профиля/магазина (seller_id). - 📋 Глубокий сбор характеристик (PR #337 / Issue #335): Извлечение всех параметров («О помещении», площадь, этаж, тех. характеристики авто и электроники) из Beduin-сценариев и Mobile API.
- 📝 Полный текст описания (PR #329 / Issue #305): Извлечение многострочного описания из микроразметки Schema.org и сценариев Avito.
- 🛡️ Обход TLS-fingerprinting: Имитация сетевого отпечатка Chrome/Safari через
curl_cffiс автоматическим фолбэком на стандартный HTTP-транспорт. - 📊 Экспорт данных: В Excel (
.xlsxсо стилями), CSV, JSON, JSONL, а также в Pandas и Polars DataFrame. - 💻 Консольная утилита (CLI): Быстрый поиск прямо из терминала через
avito-sdk searchилиavito-parser. - 🌐 Мультиплатформенность: Поддержка Python 3.8 – 3.16+, Free-Threaded No-GIL (3.13t–3.15t) и PyPy.
📦 Установка
# Базовая установка
pip install avito-sdk
# С поддержкой обхода анти-бот защиты (рекомендуется)
pip install "avito-sdk[tls]"
# Полная установка (Excel, TLS, Async, DataFrames)
pip install "avito-sdk[all]"
Или через Conda / Mamba:
conda install -c conda-forge avito-sdk
⚡ Быстрый старт
1. Синхронный поиск объявлений
from avito_sdk import AvitoClient
client = AvitoClient()
# Поиск ноутбуков в Москве до 80 000 ₽
for item in client.search("ноутбук thinkpad", region="Москва", max_price=80000, limit=10):
print(f"[{item.id}] {item.title} — {item.price:,} ₽ | Продавец: {item.seller_name}")
if item.has_price_changed:
print(f" 🔥 Цена изменилась! Старая: {item.old_price:,} ₽ (Снижение: {item.price_drop:,} ₽)")
2. Асинхронный стриминг (для Telegram-ботов и FastAPI)
import asyncio
from avito_sdk import AsyncAvitoClient
async def main():
async with AsyncAvitoClient() as client:
async for item in client.search("rtx 4070", region="Санкт-Петербург", limit=20):
print(f"Найдено: {item.title} ({item.price:,} ₽) -> {item.url}")
asyncio.run(main())
3. Получение полных параметров и характеристик (PR #337)
from avito_sdk import AvitoClient
client = AvitoClient()
# Получаем карточку объявления со всеми характеристиками
item = client.get_item(1234567890)
print("Название:", item.title)
print("Цена:", item.price)
print("Продавец:", item.seller_name)
print("Просмотры:", f"{item.total_views} всего, {item.today_views} сегодня")
print("\nХарактеристики (PR #337):")
for param_name, param_val in item.params.items():
print(f" • {param_name}: {param_val}")
print("\nОписание (PR #329):")
print(item.description)
4. Отслеживание падения цен (PR #334)
from avito_sdk import AvitoClient, PriceTracker
client = AvitoClient(tracker_db="prices.db")
# Запускаем сбор и авто-трекинг
items = list(client.search("iPhone 15 Pro", region="Москва", limit=50))
# Получаем список объявлений, у которых цена упала:
tracker = client.tracker
drops = tracker.get_price_drops()
for drop in drops:
diff = drop["initial_price"] - drop["current_price"]
print(f"📉 Скидка! {drop['title']}: {drop['initial_price']:,} -> {drop['current_price']:,} ₽ (-{diff:,} ₽)")
5. Экспорт в Excel / JSON / Pandas
from avito_sdk import AvitoClient, to_excel, to_json, to_dataframe
client = AvitoClient()
items = list(client.search("PlayStation 5", limit=30, enrich_details=True))
# 1. Красивый Excel с автошириной колонок и форматированием
to_excel(items, "ps5_listings.xlsx")
# 2. JSON Lines для ML и потоковой обработки
to_json(items, "ps5_listings.json")
# 3. Pandas DataFrame
df = to_dataframe(items)
print(df[["id", "title", "price", "seller_name"]].head())
🖥️ Использование из консоли (CLI)
Библиотека включает встроенную консольную команду avito-sdk (или avito-parser):
# Поиск с выводом на экран и сохранением в Excel:
avito-sdk search "MacBook M2" --region moskva --max-price 90000 --output macbooks.xlsx
# Просмотр детальной карточки объявления:
avito-sdk item 3854129841
# Просмотр всех зафиксированных снижений цен:
avito-sdk drops --db prices.db
🛠️ Сравнение: parser_avito (GUI) vs avito-sdk (Библиотека)
| Функция | Duff89/parser_avito | avito-sdk |
|---|---|---|
| Назначение | Десктопное приложение для пользователей | Автономная Python-библиотека & SDK |
| Графический интерфейс | ✅ Есть (CustomTkinter / GUI) | ❌ Отсутствует (100% Headless) |
| Запуск на сервере / Docker / VPS | Требует виртуальный дисплей (xvfb) | ✅ Из коробки без зависимостей |
Асинхронный API (asyncio) |
❌ Нет | ✅ AsyncAvitoClient |
| Использование в Telegram-ботах | Сложно | ✅ pip install avito-sdk |
| Отслеживание цен (PR #334) | ✅ Есть | ✅ Встроенный PriceTracker |
| Характеристики товара (PR #337) | ✅ Есть | ✅ Глубокий парсер Beduin & Mobile |
| Поддержка Python 3.8 – 3.16+ | 3.11 – 3.13 | ✅ 3.8 – 3.16, No-GIL, PyPy |
📄 Лицензия
Распространяется под свободной лицензией MIT.
Автор: eminsk (M_N_N@tut.by)
Metadata
Release files for avito-sdk 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| avito_sdk-0.1.0.tar.gz | 97.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| avito_sdk-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 124.3 kB
Release files / avito_sdk-0.1.0.tar.gz
| Download URL | avito_sdk-0.1.0.tar.gz |
|---|---|
| Size | 97.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d363d25238239d15c32526835b970b9baaea52a5dfde35c19c66b2ae70599649
|
|
BLAKE2b-256 checksum How to use checksums |
3dac30fbea378e1d09ec3a64145c861dc95f5cafb225e2a85e56c0b6240b758f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.8
|
Release files / avito_sdk-0.1.0-py3-none-any.whl
| Download URL | avito_sdk-0.1.0-py3-none-any.whl |
|---|---|
| Size | 27.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8bdb32b222883c1c3483046347f0be2a7b35cb0ec5d34cfc9533eae62e264fc4
|
|
BLAKE2b-256 checksum How to use checksums |
7c8e87e54b745a67d3c2cd94f85ffb20f45c919c2703c8bb4201033ec9a63377
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.8
|