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