Python для создания идеального поста во «ВКонтакте»
Несколько месяцев назад работал над проектом, одной из главных задач которого был максимальный охват постов во «ВКонтакте». Для выведения формулы идеального поста написал скрипт на Python, который парсил записи группы и группировал данные по часу, количеству символов и типу поста.
Сразу скажу, скрипт написан далеко не идеально, я маркетолог, а не программист.
Пример работы
Для примера работы скрипта взял группу Life News. На момент написания статьи было собрано 92 207 постов, последний пост датирован 1 апреля 2017 года. 17 минут затрачено на скачивание, и 5 секунд — на обработку данных.
Выводы:
- Лучшее время для размещения записей — с 19:00 до 22:00. Этот интервал показал максимальные количество просмотров сумму активностей на пост. Интересно, что больше всего комментариев зафиксировано в дневное время, с 11:00 до 14:00, но количество комментариев на пост больше в вечернее время, с 20:00 до 22:00.
- 91% записей в сообществе короткие, до 200 символов.
- Материалы с видео набирают в два раза больше активностей, но при этом среднее количество просмотров на пост одинаковое.
- Посты без встроенной ссылки собирают больше активностей на пост, и ER в два раза выше.
Создание токена
Для работы с API «ВКонтакта» необходимо сгенерировать сервисный токен. На эту тему написано много инструкций, поэтому буду краток.
1. Перейдите на страницу создания приложения и создайте приложение «Standalone-приложение»:
2. После создания приложения перейдите в настройки и сохраните сервисный ключ доступа.
Установка дистрибутива Anaconda
Anaconda — это дистрибутив для работы с Python, в него входит много библиотек и инструментов. Нам для реализации данного скрипта понадобится Jupiter Notebook и библиотека Pandas.
- Запустите установщик и просто следуйте инструкциям.
- После успешной установки перейдите в папку, где будет располагаться ваш проект, и в строке адреса введите CMD и нажмите Enter.
- У вас откроется командная строка, введите в неё команду Jupyter Notebook и нажмите Enter.
- Откроется страница Jupyter Notebook в браузере, после чего создайте новый файл Python 3.
Работа со скриптом
Собирать данные можно как из своих групп, так и групп конкурентов. Количество постов для анализа устанавливается вручную. Собираются все стандартные данные: количество символов в тексте, сам текст, количество просмотров, комментариев, лайков и вложений.
Ввод исходных данных и подключение библиотек
Первый этап разделен на два промежуточных. В первом мы импортируем необходимые для работы библиотеки. Request — для получения данных из «ВКонтакте», Pandas — для работы с данными, DateTime — для работы с датами, библиотека Time — для создания интервалов между запросами.
На втором этапе необходимо ввести исходные данные. В поле id_group — домен группы, token — токен, полученный на предыдущем этапе, count_posts — количество постов для анализа. Для того чтобы спарсить все записи, просто введите 1 000 000, алгоритм сам возьмёт максимальное количество постов.
После ввода кода в Jupiter Notebook нажимаем Ctrl+Enter и переходим на следующую строку для ввода второй части кода.
Подключение к API и загрузка данных
Для подключения к API мы использовали метод wall.get, более подробное описание методов API в официальной справке.
Вторая часть кода с помощью get-запроса инициирует обращение к API. Не буду подробно останавливаться на get-запросе, просто скажу, что он состоит из двух параметров: URL — ссылка для запроса, и Params — параметр запроса. В словаре params, в зависимости от ваших нужд, можно поменять переменную filter на owner — посты только от владельца, all — все посты, others — гостевые посты.
Подробное описание всех параметров доступно в справке.
Ответ получаем в JSON-формате и записываем его в переменную r. Из-за ограничений API за одно обращение мы можем забрать только 100 постов. Поэтому за каждую итерацию цикла 100 постов добавляются в массив данных data_posts. Также для обхода ограничения по количеству запросов в секунду я добавил time.sleep(0.5), что позволяет сделать паузу в полсекунды между запросами.
Обработка и запись данных в Data Frame
Для работы с данными нам понадобится библиотека Pandas. Pandas — одна из самых популярных библиотек для анализа и обработки данных. Работа с библиотекой строится через объект Data Frame, внешне он напоминает таблицу, но это не совсем так. Для начала работы с DF нам необходимо преобразовать и обработать данные из JSON-формата.
Для начала создадим пустой массив, где будут храниться данные stats = []. Как вы помните, мы записывали все данные поступающие из «ВКонтакте» в массив data_posts. Теперь наша задача вытащить из него только нужное. Для обхода всего массива мы создаём цикл For, такая конструкция for record in data_posts: позволит работать с одним постом за один обход цикла.
За название поста я брал первую строчку и ограничил длину 80 символами. Это подходило исключительно для моего проекта, вы переделайте алгоритм под ваш проект. Для того чтобы записать в переменную title текст, достаточно title = record['text']. Далее я замерил длину текста и разделил на 100, взяв только целое число для удобной группировки.
Переменные Date и Hour — это дата в формате «гггг-мм-дд» и час выхода поста соответственно. Следующий блок кода — это поиск и подсчёт количества вложений. Все они перечислены в словаре attachments.
Последнее условие проверяет, есть ли в данных о посте количество просмотров. «ВКонтакте» относительно недавно ввела количество просмотров в записи, и поэтому при получении постов, опубликованных раньше 2017 года, скрипт выдавал ошибку, так как ключ Views отсутствовал. По этой причине я записывал в такие посты 0;
В этой части кода мы подсчитываем сумму активностей и добавляем в наш массив данные, которые нам интересны.
В последнем фрагменте третьей части мы записываем наши данные в Data Frame. Сначала необходимо задать название столбцов, я задал их через массив columns. После чего мы создаём объект Data Frame и в качестве аргументов передаём в него массив данных stats и название заголовков columns. Готово, объект создан, и теперь с ним можно работать.
Вычисление показателей и запись в Excel
Получившийся Data Frame группируем по часу, типу постов и длине текстов и вычисляем показатели вроде средней активности на пост, просмотров на пост и ER.
И записываем в Excel-файл.
Файл записывается туда же, где находится файл Jypter Notebook. Он содержит исходные необработанные данные, сгруппированные данные по часу, сгруппированные данные по количеству символов и группировку по вложениям.
Надеюсь, данный гайд поможет вам найти формулу вашего идеального поста.