Привет! Сегодня разберём, как парсить ВКонтакте через официальный API. Да, VK предоставляет API, и это легально! Главное — правильно его использовать. 🎯
Получаем токен доступа
Для работы с VK API нужен токен. Есть несколько способов его получить, но самый простой — создать приложение на vk.com/apps?act=manage.
# После создания приложения получишь:
APP_ID = 12345678 # ID приложения
ACCESS_TOKEN = "your_access_token_here" # Токен доступа
Первый запрос: получаем информацию о группе
Начнём с простого — получим информацию о группе:
import requests
def get_group_info(group_id, access_token):
"""Получаем информацию о группе"""
url = "https://api.vk.com/method/groups.getById"
params = {
'group_id': group_id,
'access_token': access_token,
'v': '5.131' # Версия API
}
response = requests.get(url, params=params)
data = response.json()
if 'response' in data:
group = data['response'][0]
return {
'name': group.get('name'),
'members_count': group.get('members_count'),
'description': group.get('description')
}
return None
# Использование (group_id может быть числом или коротким именем)
info = get_group_info('example_group', ACCESS_TOKEN)
print(f"Название: {info['name']}")
print(f"Участников: {info['members_count']}")
Парсим посты из группы
Теперь получим посты. Это самое интересное!
def get_group_posts(group_id, access_token, count=100):
"""Получаем посты из группы"""
url = "https://api.vk.com/method/wall.get"
params = {
'owner_id': f"-{group_id}", # Минус для групп!
'count': count,
'access_token': access_token,
'v': '5.131'
}
response = requests.get(url, params=params)
data = response.json()
if 'response' in data:
posts = data['response'].get('items', [])
return posts
return []
# Использование
posts = get_group_posts('example_group', ACCESS_TOKEN, count=50)
for post in posts:
print(f"Дата: {post.get('date')}")
print(f"Текст: {post.get('text', '')[:100]}...")
print(f"Лайков: {post.get('likes', {}).get('count', 0)}")
print(f"Репостов: {post.get('reposts', {}).get('count', 0)}")
print("---")
Получаем комментарии к постам
Комментарии — это отдельный запрос:
def get_post_comments(owner_id, post_id, access_token):
"""Получаем комментарии к посту"""
url = "https://api.vk.com/method/wall.getComments"
params = {
'owner_id': owner_id,
'post_id': post_id,
'count': 100,
'access_token': access_token,
'v': '5.131'
}
response = requests.get(url, params=params)
data = response.json()
if 'response' in data:
comments = data['response'].get('items', [])
return comments
return []
# Использование
comments = get_post_comments(-12345678, 12345, ACCESS_TOKEN)
for comment in comments:
print(f"Автор: {comment.get('from_id')}")
print(f"Текст: {comment.get('text')}")
print("---")
Парсим участников группы
Список участников тоже можно получить (если группа открытая):
def get_group_members(group_id, access_token, count=1000):
"""Получаем участников группы"""
url = "https://api.vk.com/method/groups.getMembers"
params = {
'group_id': group_id,
'count': count,
'access_token': access_token,
'v': '5.131'
}
response = requests.get(url, params=params)
data = response.json()
if 'response' in data:
members = data['response'].get('items', [])
return members
return []
# Использование
members = get_group_members('example_group', ACCESS_TOKEN)
print(f"Всего участников: {len(members)}")
Обработка ошибок и лимитов
VK API имеет ограничения по количеству запросов. Нужно обрабатывать ошибки:
import time
def safe_api_call(url, params, max_retries=3):
"""Безопасный вызов API с обработкой ошибок"""
for attempt in range(max_retries):
try:
response = requests.get(url, params=params)
data = response.json()
if 'error' in data:
error = data['error']
error_code = error.get('error_code')
if error_code == 6: # Слишком много запросов
wait_time = 2 ** attempt # Экспоненциальная задержка
print(f"Лимит! Ждём {wait_time} секунд...")
time.sleep(wait_time)
continue
else:
print(f"Ошибка API: {error.get('error_msg')}")
return None
return data
except Exception as e:
print(f"Ошибка: {e}")
if attempt < max_retries - 1:
time.sleep(1)
return None
Используем библиотеку vk_api
Есть готовая библиотека, которая упрощает работу:
# pip install vk-api
import vk_api
# Авторизация
vk_session = vk_api.VkApi(token=ACCESS_TOKEN)
vk = vk_session.get_api()
# Получаем посты
posts = vk.wall.get(owner_id=-12345678, count=100)
# Получаем участников
members = vk.groups.getMembers(group_id='example_group')
# Намного проще, правда?
Итоги
VK API — мощный инструмент для парсинга данных из ВКонтакте. Главное — соблюдать лимиты запросов и правильно обрабатывать ошибки. Удачи! 🎉