Задать вопрос
DmnNovak
@DmnNovak
Сталкиваюсь с Питоном, но он не толкается

Как выгрузить больше 100 постов через VK API?

Всем привет,

Есть код, выгружающий текст из массива ссылок в df'e. Но к сожалению, в ВК API есть ограничение на 100 постов. А массив состоит из 4к строк. Можно ли как то выгрузить по всему массиву? Можно ли как то обойти ограничение?

from vk_api import VkApi
from vk_api.exceptions import ApiError
import re
import pandas as pd

token = 11111

vk_session = VkApi(token=token)
vk = vk_session.get_api()

df1 = pd.read_excel (r'C:\Users\Bot\Downloads\1.xlsx')

# Функция для извлечения идентификатора поста из ссылки
def extract_post_id(url):
    match = re.search(r'wall(-?\d+_\d+)', url)
    if match:
        return match.group(1)
    return None

# Список ссылок на посты
post_urls = df1 ['Ссылка на пост'] 

# Извлекаем идентификаторы постов
post_ids = [extract_post_id(url) for url in post_urls if extract_post_id(url)]

# Получаем текст постов
try:
    posts = vk.wall.getById(posts=','.join(post_ids))
    for post in posts:
        df = pd.DataFrame(posts)
except ApiError as e:
    print(f"Ошибка: {e}")

df.to_excel (r'C:\Users\Bot\Desktop\БД\данные.xlsx', index=False)
  • Вопрос задан
  • 45 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@WaterSmith
Android-разработчик. Java, Kotlin
Можно ли как то обойти ограничение?

Можно, выгружайте по частям, по 100 за раз.
Ограничение в АПИ сделано не просто так, а для уменьшения нагрузки на сервера.
Ответ написан
Комментировать
Lord_of_Rings
@Lord_of_Rings
Дунадан - северный странник. Злой, но очень добрый
Может это сработает
from vk_api import VkApi
from vk_api.exceptions import ApiError
import re
import pandas as pd

token = 1111

vk_session = VkApi(token=token)
vk = vk_session.get_api()

df1 = pd.read_excel(r'C:\Users\Bot\Downloads\1.xlsx')

def extract_post_id(url):
    match = re.search(r'wall(-?\d+_\d+)', url)
    if match:
        return match.group(1)
    return None

post_urls = df1['Ссылка на пост']

post_ids = [extract_post_id(url) for url in post_urls if extract_post_id(url)]

# Разбиваем список идентификаторов на части по 100 элементов
chunks = [post_ids[i:i + 100] for i in range(0, len(post_ids), 100)]

all_posts = []

# Получаем текст постов по частям
for chunk in chunks:
    try:
        posts = vk.wall.getById(posts=','.join(chunk))
        all_posts.extend(posts)
    except ApiError as e:
        print(f"Ошибка: {e}")

df = pd.DataFrame(all_posts)

df.to_excel(r'C:\Users\Bot\Desktop\БД\данные.xlsx', index=False)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы