Skip to main content

Модульный парсер данных пользователей из социальной сети ВКонтакте

Project description

VK Data Parser

Модульный парсер данных из социальной сети ВКонтакте.

Функциональность

  • Сбор информации о пользователях и их постах
  • Сбор сообществ, в которых состоят пользователи
  • Обход социального графа с настраиваемой глубиной
  • Сбор подписчиков из указанных сообществ
  • Асинхронные запросы для повышения производительности
  • Хранение данных в JSON формате
  • Пакетная обработка для оптимизации запросов
  • Продвинутое логирование с автоматической ротацией файлов
  • Возможность возобновления сбора данных с точки остановки

Структура проекта

vk_parser/
├── __init__.py
├── api/
│   ├── __init__.py
│   └── vk_client.py      # Клиент для работы с API ВКонтакте
├── config/
│   ├── __init__.py
│   └── settings.py       # Конфигурация и настройки
├── models/
│   ├── __init__.py
│   └── user.py           # Модели данных пользователей
├── utils/
│   ├── __init__.py
│   ├── logging_setup.py  # Настройка логирования
│   ├── state_manager.py  # Управление состоянием
│   ├── clean_logs.py     # Скрипт очистки старых логов
│   └── storage.py        # Утилиты для хранения данных
├── collector.py          # Основной класс сборщика данных
└── main.py               # Точка входа в приложение

Установка

Вариант 1: Установка из PyPI

pip install vk-parser

Вариант 2: Установка из исходников

  1. Клонировать репозиторий:
git clone <repo-url>
cd vk-parser
  1. Установить пакет в режиме разработки:
pip install -e .
  1. Создать файл конфигурации:
cp config.ini.example config.ini
  1. Отредактировать config.ini, добавив свои данные доступа к API.

Использование

Запуск через командную строку

После установки пакета вы можете запустить парсер через командную строку:

vk-parser --config path/to/config.ini

С указанием пути к файлу конфигурации:

vk-parser --config path/to/config.ini

Включение режима отладки:

vk-parser --debug

Использование как библиотеки

Вы также можете использовать VK Parser как библиотеку в своих проектах:

import asyncio
from vk_parser.main import run_parser

async def main():
    # Запуск парсера с указанием параметров
    await run_parser(
        config_path="config.ini",
        resume=True,
        debug=True
    )

if __name__ == "__main__":
    asyncio.run(main())

Для более сложных сценариев вы можете использовать отдельные компоненты:

from vk_parser.config.settings import load_config
from vk_parser.collector import VKDataCollector

async def custom_collection():
    config = load_config("config.ini")
    
    # Можно программно изменить настройки
    config.load_communities = True  # Включение загрузки сообществ
    
    # Задать сообщества для сбора подписчиков
    config.communities_ids = ["123456", "789012"]
    config.max_community_members = 5000  # Ограничение количества подписчиков
    
    collector = VKDataCollector(config)
    
    # Запуск сборщика
    await collector.run()
    
    # Или использование отдельных методов
    # await collector.collect_friends("user_id")
    # await collector.collect_community_members("community_id")

Система логирования

Парсер имеет продвинутую систему логирования:

  • Логи автоматически сохраняются в директорию logs/ с датой в имени файла
  • Реализована ротация логов (до 5 файлов по 10 МБ каждый)
  • Вывод осуществляется как в консоль, так и в файл

Указание пути сохранения логов:

python -m vk_parser.main --log-dir custom/logs/path

Указание имени файла логов:

python -m vk_parser.main --log custom_name.log

Очистка старых логов

Для поддержания чистоты и экономии дискового пространства вы можете использовать скрипт очистки логов:

python -m vk_parser.utils.clean_logs --days 30

Где 30 - количество дней, после которых лог-файлы будут удалены.

Дополнительные опции:

python -m vk_parser.utils.clean_logs --log-dir path/to/logs --recursive --dry-run
  • --log-dir (-d) - директория с логами
  • --days (-n) - удалять файлы старше N дней
  • --recursive (-r) - рекурсивный поиск в поддиректориях
  • --dry-run - только показать, что будет удалено (без фактического удаления)

Возобновление сбора данных

Парсер автоматически сохраняет состояние сбора данных каждые 10 секунд и при завершении. Для возобновления сбора данных используйте опцию --resume:

python -m vk_parser.main --resume

Вы также можете указать путь к файлу состояния:

python -m vk_parser.main --resume --state-file custom_state.json

Для очистки сохраненного состояния и начала сбора сначала:

python -m vk_parser.main --clear

Настройка

Все настройки доступны в файле config.ini:

  • access_token - токен доступа к API ВКонтакте
  • start_user_id - ID пользователя для начала сбора данных (опционально, если указаны communities_ids)
  • max_depth - максимальная глубина обхода (по умолчанию 5)
  • max_users - максимальное количество пользователей для сбора (по умолчанию 20000)
  • batch_size - размер батча для запросов (по умолчанию 25)
  • request_delay - задержка между запросами в секундах (по умолчанию 0.35)
  • save_interval - интервал сохранения данных (по умолчанию 5000 пользователей)
  • load_communities - флаг, определяющий необходимость загрузки сообществ пользователей (по умолчанию false)
  • communities_ids - список ID сообществ через запятую для сбора подписчиков (опционально, если указан start_user_id)
  • max_community_members - максимальное количество подписчиков, собираемых из каждого сообщества (по умолчанию 10000)

Важно: В конфигурации должен быть указан хотя бы один источник данных: либо start_user_id для сбора по графу друзей, либо communities_ids для сбора из сообществ, либо оба параметра одновременно.

Поведение при прерывании

Парсер обрабатывает сигналы завершения и корректно сохраняет текущее состояние. При возобновлении сбора, парсер:

  1. Загружает списки уже обработанных и уникальных пользователей
  2. Восстанавливает счетчики и индексы
  3. Продолжает сбор с последних необработанных пользователей

Требования

  • Python 3.7+
  • vk_api
  • asyncio

На сбор 40 тыс. пользователей ушло 22ч. 21.05.2025 в 21.00 стартанули

Структура данных

Данные пользователя

Каждый пользователь представлен в формате JSON и содержит следующие поля:

  • Основная информация: id, имя, фамилия, и т.д.
  • Дополнительные поля: город, страна, интересы, и т.д.
  • posts - массив последних постов пользователя
  • communities - массив сообществ, в которых состоит пользователь
  • source_community - ID сообщества, из которого был получен пользователь (присутствует только для пользователей, собранных из списка подписчиков сообществ)

Пример структуры данных сообщества:

{
  "id": 12345678,
  "name": "Название сообщества",
  "screen_name": "group_name",
  "is_closed": 0,
  "type": "group",
  "members_count": 5000,
  "description": "Описание сообщества"
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vk_parser-0.2.0.tar.gz (24.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vk_parser-0.2.0-py3-none-any.whl (26.1 kB view details)

Uploaded Python 3

File details

Details for the file vk_parser-0.2.0.tar.gz.

File metadata

  • Download URL: vk_parser-0.2.0.tar.gz
  • Upload date:
  • Size: 24.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for vk_parser-0.2.0.tar.gz
Algorithm Hash digest
SHA256 af1f39da328b14eb48b4852f6394d7308da6dbbda115c8121f7c107cafac2586
MD5 4ac37e3dabdf958267a13e06c0c19df2
BLAKE2b-256 451f4dbe7dad68c3175210ee5ea5fc2c741b572a103189bc0f89f27c9b6a6b4a

See more details on using hashes here.

File details

Details for the file vk_parser-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: vk_parser-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 26.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for vk_parser-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 65c6c300e3431d2ee682d761c2061a66c130a91eb36814f77161f075530f35ac
MD5 d3035329e50715644e79f6c0802ecc0f
BLAKE2b-256 616147ca5b44bf54714275987958ac06c9098532bcc2f3e1998a973bce28c02c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page