Простой парсер всех участников группы с сохранением в файл 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)