Парсер участников группы ВКонтакте



Простой парсер всех участников группы с сохранением в файл CSV.

Предварительно необходимо получить токен доступа к API. Перейти на страницу https://dev.vk.com/ru/mini-apps/management/creating-new-apps, выбрать раздел «Standalone-приложение». Когда приложение появится в общем разделе, рядом с названием будет отображаться его id. Далее необходимо собрать ссылку следующего вида:

https://oauth.vk.com/authorize?client_id={ID приложения}&display=page&scope=offline,groups&response_type=token&v=5.199

Версию рекомендуется устанавливать последнюю, узнать можно на странице https://dev.vk.com/ru/reference/versions

scope — список разрешений, указываются через запятую.

После перехода по полученной ссылке браузер автоматически перенаправит на другую страницу, нужный токен будет в URL, параметр access_token.

Далее будут отдельно рассмотрены основные блоки кода.

Основные настройки:

TOKEN = "vk1.a.xoTm-RU2Pg9NIsIoOLfDAxvN3fCr9"  # Токен полученный по инструкции выше
GROUP_ID = "club123"   # Короткое имя группы (например "club1") или ID (с минусом: -123)
DELAY = 10  # Пауза между запросами 
OUTPUT_FILE = "members.csv"  # Файл для сохранения
        vk = vk_api.VkApi(token=token).get_api()
        all_members = []
        offset = 0
        count_per_request = 1000  # Максимум 1000 за запрос

Подготавливаем запрос, создаем пустой список для сохранения всех пользователей. Также устанавливаем начальное значение для смещения и количество пользователей, которое будет запрашиваться за один запрос. API ВКонтакте позволяет загружать не более 1000 пользователей за один запрос.

response = vk.groups.getMembers(
    group_id=group_id,
    count=count_per_request,
    offset=offset,
    fields="nickname"  # Имя, фамилия и др.
)
            
members = response["items"]
all_members.extend(members)

Отправляем запрос, извлекаем пользователей в рамках текущего лимита и добавляем их в общий список.

if len(members) < count_per_request:
    break
offset += count_per_request

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

    with open(OUTPUT_FILE, "w", newline="", encoding="utf-8-sig") as file:
        writer = csv.writer(file)
        writer.writerow(["ID", "Имя", "Фамилия", "Ссылка"])
        for user in members:
            writer.writerow([
                user["id"],
                user.get("first_name", ""),
                user.get("last_name", ""),
                f"https://vk.com/id{user['id']}"
            ])
    
    print(f"Сохранено {len(members)} участников в файл {OUTPUT_FILE}")

Открываем файл, создаем заголовки и записываем полученный список.

Далее весь код целиком:

import vk_api
from vk_api.exceptions import ApiError
import time
import csv

# Настройки
TOKEN = "vk1.a.7au6pAyT6U3fCrQ"
GROUP_ID = "club123"   # Короткое имя группы (например "club1") или ID (с минусом: -123)
DELAY = 10  # Пауза между запросами 
OUTPUT_FILE = "members.csv"  # Файл для сохранения


def get_all_group_members(token, group_id):
    try:
        vk = vk_api.VkApi(token=token).get_api()
        all_members = []
        offset = 0
        count_per_request = 100  # Максимум 100 за запрос
        while True:
            print(f"Cмещение {offset})")
            # Запрос к API
            response = vk.groups.getMembers(
                group_id=group_id,
                count=count_per_request,
                offset=offset,
                fields="nickname"  # Имя, фамилия и др.
            )
            
            members = response["items"]
            all_members.extend(members)
            
            # Проверяем, есть ли еще участники
            if len(members) < count_per_request:
                break
            offset += count_per_request
            time.sleep(DELAY)  # пауза между запросами
        save_res(all_members)
    except ApiError as e:
        print(f"Ошибка VK API: {e}")
        return []


def save_res(members):
    with open(OUTPUT_FILE, "w", newline="", encoding="utf-8-sig") as file:
        writer = csv.writer(file)
        writer.writerow(["ID", "Имя", "Фамилия", "Ссылка"])
        for user in members:
            writer.writerow([
                user["id"],
                user.get("first_name", ""),
                user.get("last_name", ""),
                f"https://vk.com/id{user['id']}"
            ])
    
    print(f"Сохранено {len(members)} участников в файл {OUTPUT_FILE}")


if __name__ == "__main__":
    print("Начинаем сбор участников...")
    get_all_group_members(TOKEN, GROUP_ID)


Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: