Как получить текст из публикаций в ВКонтакте?

Привет всем! <br/> <br/> У меня есть задача: необходимо извлечь только текст из постов ВКонтакте. У меня есть примерно 15 тысяч ссылок в формате - <a href="https://vk.com/wall-22522055_2191390" rel="nofollow">https://vk.com/wall-22522055_2191390</a>. Не знаю, как реализовать данное решение на Python. Я смогла сделать только вот это: <br/> <br/> <pre><code class="python">from vk_api import VkApi
from vk_api.exceptions import ApiError

# Ваш токен доступа
token = 11111'

# Создаем объект VKSession
vk_session = VkApi(token=token)

# Получаем объект VK_API
vk = vk_session.get_api()

try:
    text_post = vk.wall.getById()</code></pre> <br/> <br/> Буду благодарна за любую помощь!
  • 24 декабря 2024 г. 10:23
Ответы на вопрос 2
Для извлечения текста из постов ВКонтакте с использованием Python и библиотеки `vk_api`, можно воспользоваться методом `wall.getById()`, как вы уже начали. Вам нужно будет передать идентификаторы постов в нужном формате.

Вот пример, как можно использовать вашу информацию и ссылки для получения текста постов:

```python
from vk_api import VkApi
from vk_api.exceptions import ApiError

# Ваш токен доступа
token = 'ваш_токен'

# Создаем объект VKSession
vk_session = VkApi(token=token)

# Получаем объект VK_API
vk = vk_session.get_api()

# Список ссылок на посты ВКонтакте
post_links = [
    "https://vk.com/wall-22522055_2191390",
    # Добавьте сюда остальные ссылки
]

# Список для хранения текстов постов
texts = []

for link in post_links:
    try:
        # Получаем идентификатор поста
        owner_id, post_id = link.split('/')[-1].split('_')
        # Делаем запрос к API для получения поста
        post_info = vk.wall.getById(posts=[f"{owner_id}_{post_id}"])

        # Извлекаем текст из поста
        if post_info:
            post_text = post_info[0].get('text', '')
            texts.append(post_text)
            print(f"Пост {link}: {post_text}")
    
    except ApiError as e:
        print(f"Ошибка при получении поста {link}: {e}")

# Теперь у вас есть список текстов постов в переменной texts
```

### Что делает этот код:
1. Импортирует необходимые библиотеки.
2. Создает объект `VkApi` с вашим токеном доступа.
3. Определяет список ссылок на посты ВКонтакте.
4. Для каждой ссылки:
   - Извлекает `owner_id` и `post_id` из ссылки.
   - Вызывает метод `wall.getById()` для получения информации о посте.
   - Извлекает текст поста и добавляет его в список.
5. Выводит текст каждого поста в консоль.

### Примечание:
- Убедитесь, что ваш токен доступа имеет необходимые разрешения (scope) для доступа к публичным постам.
- Если количество постов большое, может потребоваться обработка ограничений API. Например, можно реализовать задержку между запросами или обрабатывать ошибку превышения лимита.
Вроде бы так, но точно не проверял 
from vk_api import VkApi
from vk_api.exceptions import ApiError
import re

token = '1111'

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

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

# Список ссылок на посты
post_urls = [
    'https://vk.com/wall-22522055_2191390',
]

# Извлекаем идентификаторы постов
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:
        print(f"ID: {post['id']}, Текст: {post['text']}")
except ApiError as e:
    print(f"Ошибка: {e}")
Похожие вопросы