Как парсить вк python
Перейти к содержимому

Как парсить вк python

  • автор:

Пишем простой парсер ВК на Python

Парсер — программа, которая по заданному алгоритму собирает нужную информацию на сайте. Парсеры часто применяют в маркетинговых целях, чтобы собрать базу для таргетированной рекламы или спам рассылки. Наш парсер будет способен формировать базу участников выбранного сообщества, сохранять базы в txt файле, высчитывать процент пересечения двух баз, объединять две базы в одну без повторов, а также будет доступен ввод сохраненной базы из txt файла.

Подготовка

Для взаимодействия с API Вконтакте мы будем использовать модуль vk. Установить vk можно через pip с помощью команды: pip install vk

Также, чтобы получить сервисный ключ доступа, нам потребуется создать приложение на сайте Вконтакте. Это можно сделать по этой ссылке.

Пишем код

Первым делом давайте импортируем модуль vk, обозначим имена наших будущих функций и напишем авторизацию.

Конструкция if __name__ == "__main__": нужна чтобы описать, что будет происходить, если запустить эту программу как основную. Другими словами, если импортировать эту программу в другой код как модуль, то все описанные действия в этой конструкции исполняться не будут.

Теперь приступим к созданию наших функций. Для того, чтобы собрать данные об участниках группы, мы будем использовать метод API groups.getMembers. Основной параметр этого метода group_id — это id(только цифры) или короткое имя сообщества, эту информацию можно найти в URL сообщества. Параметр v — это версия API, посмотреть актуальную можно тут. Метод возвращает нам данные в виде словаря. “count” — кол-во подписчиков, “items” — список id’шников.

Проблема заключается в том, что этот метод может возвратить нам максимум 1000 id’шников. Но благодаря параметру offset, который отвечает за смещение от начала полного списка участников(по умолчанию 0), и циклу for, мы можем получить список всех участников сообщества.

Теперь напишем функции сохранения базы в файл и чтения базы из файла.

Далее реализуем две функции, использующие множества.

Весь основной функционал готов, осталось лишь дописать в конструкцию if __name__ == "__main__": какие функции мы хотим применить.

Например, давайте найдем пересечение аудиторий двух групп про кино, объединим их аудиторию без повторов и сохраним в txt файл.
1. https://vk.com/hdkinomania
2. https://vk.com/bobfilm

Код будет выглядеть вот так:

Пересечение аудиторий у этих двух сообществ — 1,65%

На этом все! При желании, немного изменив код, можно собирать больше информации о пользователях.

Парсинг данных через api vk и google sheets api на python

Появилась потребность собирать статистику постов из группы в контакте и затем проанализировать реакции подписчиков на конкретные посты. Если переформулировать на выходе стоит задача с заданной периодичностью снимать показания статистики постов в вк и сохранять их.

Я не профессиональный программист и не претендую, поэтому решил сделать все довольно просто. При помощи api VK забирать посты из группы, собираю нужный мне датафрейм и записываю данные в гугл таблицу, так же через api.

Может быть это и не самое оптимальное решение,

Настраиваем API VK

В этом блоке мы хотим собрать статистику постов из группы vk.

Для начала работы нам нужен user_token из vk. Мне понравилась видеоинструкция здесь, коротко и по делу.

Токен держим в секрете. Переходим в https://dev.vk.com изучаем документацию API.

Прямо на сайте документации можем попробовать дернуть запрос.

Для этого нам нужно access_token, domain, count, v, filter.

access_token – получили на прошлом шаге. domain – название группы вы увидите в url название группы например https://vk.com/adminsclub. count – количество постов которые можем дернуть. v – версия api. filter – хотим получить только посты от группы устанавливаем owner.

vk можно попробовать, как работает сам метод.

Прописываем логику сбора

Импортируем библиотеку requests. Дергаем тестовый запрос. Поcле анализа структуры решаю, что мне нужен раздел items

Отдельное поле в статистики количество фотографий для поста, я не нашел.

Через цикл перебираем каждый пост и считаем количество фото, если фотографии нет скрипт ловит ошибку. Обрабатываем ошибку и ставим 0. Собираем новый список с полями id поста и количество фото.

Пишем обработчик. Вызываем pandas

Переводим cловарь в df. Импортируем метод from pandas import json_normalize

Оставляем нужные атрибуты и переводим дату в другой формат.

В переменной post_id запихиваем id наших постов.

Я бы хотел обогатить свою статистику более расширенными измерениями

Из документации по api о которой рассказывал выше подобрал метод status.getPostReach

В методе обнаружил новый аргумент owner_id, его можно найти в настройках группы.

Делаем еще один запрос и новые данные сохраняем в датафрейм df_stat_post

Теперь приступим к сборке объединяем все наши датафреймы, накидываем дополнительные метрики.

Далее наши данные преобразовываем для загрузки в гугл таблицу.

Грузим в google sheet через api

Есть готовые библиотеки для работы с google sheet например pygsheets, но мне было важно поработать с API поэтому легких путей не искал.

Прежде чем загрузить надо настроить наш api прекрасная статья, в который пошагово написано и даст возможность поиграться с листами https://habr.com/ru/post/483302/

После подключения к листу. Находим последнюю заполненную строку.

В моем примере я заполняю последние 10 строк ровно по количеству постов которые я получил из get запроса. Подготавливаем шаблон для запроса, заполняем шаблон данными какие ячейки заполняем и заполняем. Далее выполняем запрос. Готово

Заключение

После написания этого кода мне требовалось запускать его каждый час и принял решение арендовать сервер, установить туда docker и через crontab запускать.

Name already in use

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Парсер групп Вконтакте

Программа собирает посты и комментарии с социальной сети Вконтакте, отбирает сообщения по ключевым словам нечетким сравнением и проверкой орфографии, сохраняет сообщения в нереляционную базу данных MongoDB. Реализован телеграмм бот для удаленного управления.

Windows 11
Python 3.10.5
MongoDB 5.0.9

В Linux Ubuntu и macOS возникли ошибки с библиотекой pyenchant (для проверки орфографии).

Выполните следующие действия

  1. Установите MongoDB (MongoDB Community Server, https://www.mongodb.com/try/download)
  2. Подключитесь к интерфейсу:
  1. Создайте БД с именем ‘vk’:
  1. Создайте коллекцию с именем ‘user’:
  1. Установите все зависимости:
  1. Добавить словарь для поддержки русского языка в pyenchant
    Словари в папке dictionary: ru_RU.aff и ru_RU.dic
    Скопировать в папку со словарями:
    C:\Users\username\AppData\Local\Programs\Python\Python39\Lib\site-packages\enchant\data\mingw64\share\enchant\hunspell
  2. Создайте свое приложение (Standalone-приложение): https://vk.com/apps?act=manage
    Входные данные для получения токена
    client_id — id приложения
    scope — права доступа (https://dev.vk.com/reference/access-rights)
    Запрос для получения токена:
    https://oauth.vk.com/authorize?client_id=111111&display=mobile&redirect_uri=https://oauth.vk.com/blank.html&scope=wall,offline&response_type=token&v=5.131
  3. Для работы без телеграмм бота:
    DOMAIN — Короткий адрес сообщества.
    OWNER_ID — Идентификатор сообщества, со стены которого необходимо получить записи.
  1. Для работы с телеграмм ботом
    В data/allow.txt добавить пользователей (каждого с новой строки).
    В data/words.txt добавить слова (каждое с новой строки).
    В data/group.json добавляется через телеграмм бота, в дальнейшем можно править вручную.
    Создать телеграмм бота через https://t.me/BotFather
    Добавить токен нового бота в config.py

Как отозвать токен?

Вы можете принудительно отозвать токен (например, в том случае, если он стал известен постороннему), сбросив сеансы в настройках безопасности вашего аккаунта или сменив пароль. Также, если речь идет о токене не из вашего собственного приложения, можно просто удалить приложение из настроек: https://vk.com/settings?act=apps

About

Программа собирает посты и комментарии с социальной сети Вконтакте, отбирает сообщения по ключевым словам нечетким сравнением и проверкой орфографии, сохраняет сообщения в нереляционную базу данных MongoDB. Реализован телеграмм бот для удаленного управления.

Парсинг целевой аудитории ВКонтакте

При размещении рекламы некоторые площадки в настройках аудитории позволяют загрузить список конкретных людей, которые увидят рекламу. Для парсинга id по конкретным пабликам существуют специальные инструменты, но куда интереснее (и дешевле) сделать это собственноручно при помощи Python и VK API. Сегодня расскажем, как для рекламной кампании LEFTJOIN мы спарсили целевую аудиторию и загрузили её в рекламный кабинет.

В материале «Собираем данные по рекламным кампаниям ВКонтакте» подробно описан процесс получения токена пользователя для VK API

Парсинг пользователей

Для отправки запросов потребуется токен пользователя и список пабликов, чьих участников мы хотим получить. Мы собрали около 30 сообществ, посвящённых аналитике, BI-инструментам и Data Science.

Запрос на получение участников сообщества к API ВКонтакте вернёт максимум 1000 строк — для получения последующих тысяч потребуется смещать параметр offset на единицу. Но нужно знать, до какого момента это делать — поэтому опишем функцию, которая принимает id сообщества, получает информацию о числе участников сообщества и возвращает максимальное значение для offset — отношение числа участников к 1000, ведь мы можем получить ровно тысячу человек за раз.

Следующим этапом опишем функцию, которая принимает id сообщества, собирает в один список id всех подписчиков и возвращает его. Для этого отправляем запросы на получение 1000 человек, пока не кончается offset, вносим данные в список и возвращаем его. Проходя по каждому человеку дополнительно проверяем дату его последнего посещения социальной сети — если он не заходил с середины ноября, добавлять его не будем. Время указывается в формате unixtime.

Теперь пройдём по всем сообществам из списка и для каждого соберём участников, а затем внесём их в общий список all_users. В конце переводим сначала список в множество, а затем опять в список, чтобы избавиться от возможных дубликатов: одни и те же люди могли быть участниками разных пабликов. Лишним не будет после каждого паблика приостановить работу программы на секунду, чтобы не столкнуться с ограничениями на число запросов.

Последним шагом записываем каждого пользователя в файл с новой строки.

Аудитория в рекламном кабинете из файла

Переходим в свой рекламный кабинет ВКонтакте и заходим во вкладку «Ретаргетинг». Там будем кнопка «Создать аудиторию»:

После нажатия на неё откроется новое окно, где можно будет выбрать в качестве источника файл и указать название для аудитории:

После загрузки пройдёт несколько секунд и аудитория будет доступна. Первые минут 10 будет указано, что аудитория слишком мала: это не так и панель вскоре обновится, если в вашей аудитории действительно более 100 человек.

Итоги

Сравним среднюю стоимость привлечённого в наше сообщество участника в объявлении с автоматической настройкой аудитории и в объявлении, аудиторию для которого мы спарсили. В первом случае получаем среднюю стоимость в 52,4 рубля, а во втором — в 33,2 рубля. Подбор качественной аудитории при помощи методов парсинга данных из ВКонтакте помог снизить среднюю стоимость на 37%.

Для рекламной кампании мы подготовили такой пост (нажмите на картинку, чтобы перейти к нему):

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *