1000 друзей Павла Дурова: как выкачивать данные ВКонтакте

Попалась мне тут когда-то интересная задача — быстро и максимально просто (с минимумом привлекаемых библиотек) нарисовать граф пересечения пользователей разных групп Вконтакте. И я ее даже сделал. Затем подумал — а вдруг кому-то еще нужно будет сделать что-то подобное?

Поэтому здесь я расскажу и покажу, как же всё-таки делать такие вещи:

1. Подключаться к веб-сайту вконтакте с помощью Python 2.7 (всегда можно переписать под 3.x, если что)

2. Создавать графы с помощью библиотеки NetworkX (здесь рассматриваем графы пересечений аудитории групп вконтакте)

3. Визуализировать эти графы (тут нам немного понадобится библиотека matplotlib)

Итак, дано:

Задание: нарисовать граф пересечений пользователей разных групп Вконтакте

Базовые инструменты: Python 2.7, NetworkX, matplotlib, numpy

Поехали!

Подключаемся к API

Если хорошо поискать в безбрежной сети, то можно найти полезные ресурсы, которые сильно облегчают подключение к АPI вконтакте.

Для начала нужно скачать специальную библиотеку-обертку — vk.com (aka vkontakte.ru) API wrapper.

Затем очень желательно скачать модуль для упрощения авторизации вконтакте вот тут (за этот скрипт большое спасибо хорошему человеку alexkutsan). Модуль мы будем звать vk_auth и всячески импортировать в дальнейшем, поэтому сохраняйте его в той же директории, где будут лежать основные скрипты. В случае, если ссылка нерабочая, то можно взять vk_auth у меня — напишите в комментариях или отправьте запрос мне на почту.

Итак, у нас есть все, чтобы просто и быстро подключиться к API вконтакте. Проверим, что все сделали как надо, и контакт теперь пускает нас в свои недра.

#!/usr/bin/env python2 # -*- coding: utf-8 -*- import vk_auth import vkontakte def test(): #параметры для vk_auth.auth — ваш логин вконтакте, ваш пароль вконтакте, id приложения, #и зона доступа, она же scope (token,user_id) = vk_auth.auth(‘your_login’, ‘your_password’, ‘2951857’, ‘groups’) vk = vkontakte.API(token=token) print «vk server time is «, vk.getServerTime() return 0

В этом скрипте нужно указать свой логин и пароль вконтакте (можете не беспокоиться — эта информация никуда не утечёт, можете проверить по коду скрипта vk_auth), в качестве id приложения нужно указать идентификационный номер своего приложения, которое предварительно нужно создать вконтакте вот таким, например, способом.

Если на видео не очень понятно, то на страничке vk.com/developers.php есть запрятанная кнопка «создать приложение» в верхнем правом углу. Сразу в глаза она не бросается — располагается чуть ниже кнопок меню «музыка» и «помощь». Там можно создать приложение и использовать его client_id в качестве id приложения.

Но! Можно использовать и чужой id. Я, например, использовал вот этот — 2951857, который был опубликован вот в этой статье на хабрахабре. Если вдруг у автора будут претензии по использованию этого идентификатора, я готов его отсюда убрать.

Далее нужно указать так называемый scope — зону доступа для нашего парсера. Так как далее мы собираемся парсить группы, то стоит указать ‘group’. Подробнее о том, что можно указать в качестве scope — можно почитать здесь

Все остальное можно оставить как есть. Если все правильно, то выполнив код, показанный выше, мы получим серверное время вконтакте.

Как узнать, с кем переписывается человек Вконтакте?

Самым безопасным способом узнать, с кем ведет переписку пользователь, это задать ему соответствующий вопрос. Подобное действие не потребует использования каких-нибудь дополнительных инструментов; не нарушает законодательство, правила пользования сайтом социальной сети «ВКонтакте». Но зачастую настоящий способ вызывает подозрения в честности человека либо может быть совершенно некорректным и обидеть парня/девушку.

Других законных и честных методов получения ответа на рассматриваемый вопрос не предусмотрено. Тогда как просторы Интернета могут предложить в поисковой выдаче различные методы:

  • Сторонние сервисы;
  • Онлайн сервисы-анализаторы;
  • Использование электронной почты;
  • Специальные программы на мобильное устройство;
  • Взлом аккаунта.

Ниже рассмотрены два, по нашему мнению, наиболее результативные и безопасные методы.

Онлайн сервисы-анализаторы

Такие сервисы-анализаторы отличаются от мошеннических сервисов тем, что данные платформы функционируют законно. Они работают в онлайн-режиме и способствуют определению информации, с кем переписывается «друг» во ВКонтакте.

Наиболее популярными и часто используемыми онлайн сервисами-анализаторами являются:

  • Сайт VKDIA.com – бесплатный сервер, не требующий регистрации. Для работы с данным аналитическим инструментом, пользователю необходимо знать ID «целевого объекта». Введя в соответствующую строку адрес на аккаунт интересующего пользователя и кликнув по кнопке «Начать отслеживание», запускается процесс сбора информации. Впоследствии система анализирует время входа в социальную сеть и момент выхода. Затем производит проверку друзей «целевого объекта» с совпадающими интервалами. Из чего можно оценить вероятность ведения переписки объекта с другим пользователем.

  • Платформа super-spy.com –один из самых тщательных сканеров персональных страниц социальной сети «ВКонтакте». Благодаря обширному функционалу возможностей, сервер производит мониторинг времени пользователя в сети онлайн, отслеживает поставленные лайки, оставленные комментарии, сделанные репосты записей. Следовательно, предоставляет Вам полные отчеты активности.

  • Ресурс vk-fans.ru – сервис, функционирование которого основано на общедоступной информации. Данный онлайн-анализатор за короткий промежуток времени собирает всю возможную информацию об объекте и делает свои выводы.

Специальные мобильные приложения

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

  • Определение активности «целевого объекта», а именно времени активации режима «В сети» и выхода человека из своего аккаунта;
  • Сопоставление данных об активности с такими же показателями его «Друзей» и выявление совпадений;
  • Сбор и анализ получаемых и поставленных лайков;
  • Отслеживание комментариев на личных страницах других пользователей социальной сети либо репостов.

Приложения, осуществляющие анализ активности пользователей ВК и дающие возможность предполагать, с кем они ведут переписку, для ОС Android являются:

  • «Гости ВК+Сыщик+Защита переписки»;
  • «Переписки и гости»;
  • «ВКурсе»;
  • «Шпион для Вконтакте».

Приведенный выше перечень шпионских программ можно продолжать дальше, так как на Google Play Маркет представлено множество подобного софта.

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

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

Парсим группы

Отлично! Все получилось (по крайней мере должно было).

А теперь попытаемся достать необходимые данные по группам вконтакте — количество участников для каждой группы и список этих самых участников в виде списка ID.

Важно знать, что API вконтакте выдает максимум 1000 пользователей группы – больше от него не допросишься. Впрочем, для проведения приблизительного анализа групп — сойдёт. Если надо больше — придётся парсить страницы групп напрямую.

Функция, которая ниже, берет на вход список имен групп вконтакте, а на выходе отдает нужные нам данные по этим группам.

#!/usr/bin/env python2 # -*- coding: utf-8 -*- import vk_auth import vkontakte import time def get_groups_users(groups_list): groups_out = {} (token,user_id) = vk_auth.auth(‘your_login’, ‘your_password’, ‘2951857’, ‘groups’) vk = vkontakte.API(token=token) for group in groups_list: #здесь му указываем count=10, который выдаст нам 10 пользователей из группы #это делается для наглядности. Максимум можно вытащить 1000 пользователей groups_out[group] = vk.get(‘groups.getMembers’, group_id=group, sort=’id_asc’, offset=100, count=10) time.sleep(1) return groups_out if __name__ == ‘__main__’: group_list = [‘oldlentach’, ‘obrazovach’, ‘superdiscoteka’] print get_groups_users(group_list) >>> {‘oldlentach’: {u’count’: 740868, u’users’: [1405, 1418, 1443, 1444, 1447, 1481, 1491, 1494, 1500, 1509]}, ‘obrazovach’: {u’count’: 217978, u’users’: [3172, 3192, 3196, 3213, 3317, 3328, 3331, 3356, 3361, 3420]}, ‘superdiscoteka’: {u’count’: 150538, u’users’: [20470, 20479, 20536, 21977, 22426, 22522, 22613, 22881, 23207, 23401]}}

Структура выходных данных такова: ключ — это имя группы, значение — это словарь с двумя ключами: u’count’ — количество участников в группе и u’users’ — список ID участников этой группы (максимум 1000, как мы помним)

В качестве имени группы берется ее адрес вконтакте, например, есть группа Образовач, которая находится по адресу https://vk.com/obrazovach и мы берем последнюю часть адреса, т.е. «obrazovach» в качестве имени группы.

Строим социальный граф

Теперь переходим непосредственно к построению социального графа.

Здесь мы будем применять библиотеку NetworkX, которая прекраснейшим образом подходит для составления, анализа и визуализации графов.

Вот таким вот образом можно создать граф для групп вконтакте:

  1. На вход подается словарь, где ключом является название группы вконтакте, а значением — количество участников этой группы и список из максимум 1000 ID участников группы (каждый ID — это ID пользователя вконтакте)
  2. Создаём вершину в графе для каждой группы, в качестве атрибута присваиваем каждой вершине вес, равный количеству участников в группе
  3. Затем для каждой пары вершин, если между ними есть пересечение по ID участников, создается ребро, и в качестве атрибута присваиваем каждому ребру вес, равный количеству пользователей, которые присутствуют в обеих группах.

Атрибуты, которые присваиваются вершинам и ребрам, необходимы для последующей визуализации. Чем больше вес вершины (количество участников в группе), тем больше будет размер вершины на диаграмме. Чем больше вес ребра (пересечение количества участников), тем толще будет ребро на диаграмме.

Вот эта функция как раз и строит описанный выше граф:

#!/usr/bin/env python2 # -*- coding: utf-8 -*- import networkx as nx def make_graph(groups_out): graph = nx.Graph() groups_out = groups_out.items() for i_group in xrange(len(groups_out)): graph.add_node(groups_out[i_group][0], size=groups_out[i_group][1][‘count’]) for k_group in xrange(i_group+2, len(groups_out)): intersection = set(groups_out[i_group][1][‘users’]).intersection(set(groups_out[k_group][1][‘users’])) if len(intersection) > 0: graph.add_edge(groups_out[i_group][0], groups_out[k_group][0], weight=len(intersection)) return graph

Визуализируем

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

Рейтинг
( 1 оценка, среднее 4 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]