Анализ больших групп Вконтакте посредством встроенного API, PYTHON, PANDAS и MATPOTLIB

Посредством АПИ Вконтакте можно почерпнуть массу ценной информации для настройки прицельной таргетированной рекламы.

Для оценки аудиторий групп был написан скрипт, работающий в 2 ключевых итерации:

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

В питон-поде парсер реализован двумя классами:

class GroupMemberList:

"""
Объект запускаем цикл со смещением сбора всех пользовательских ID из группы ВК
"""

user_ids = []

def __init__ (self, token, groupid):
url = 'https://api.vk.com/method/groups.getMembers'
count = 100
offset = 0
while True:
print('Выгружаю {} пользователей с offset = {}'.format(count, offset))
params = {
'group_id': groupid,
'v': 5.73,
'count': count,
'offset': offset,
'access_token': token
}
# такой же запрос как в прошлый раз
try:
r = requests.get(url, params = params)
data = r.json()
if data['response']['items'] == []:
break
self.user_ids += data['response']['items']
# увеличиваем смещение на количество строк выгрузки
offset += count
except KeyError:
print ('Пустой запрос')
break
except:
continue

time.sleep(0.1)

class UserDataParser:

"""
Класс получения данных о списке пользователей
"""

def __init__ (self, token, user_ids):
url = 'https://api.vk.com/method/users.get'
userdict = {}
counter = 0
final_count = 0
print ('Парсер личных данных запущен. Количество юзеров в цикле - {}'.format(len(user_ids)))

for user in user_ids:
params = {
'user_ids': user,
'v': 5.73,
'fields': 'sex,bdate,city, connections, education, followers_count, relation, domain',
'access_token': token
}
try:
data = requests.get(url, params = params)
user_id_for_keydict = str(data.json()['response'][0]['id'])
userdict[user_id_for_keydict] = data.json()['response'][0]
time.sleep(0.1)
counter +=1
final_count +=1
except:
print ('Зафиксирована ошибка')
continue

if counter >= 500:

percent = int(100 / len(user_ids) * final_count * 100) / 100

print ('Все ок. Процесс идет. В датасете уже {} юзеров.'\
.format(len(userdict)))
print ('Осталось - {}'.format (len(user_ids) - final_count))

print ('Скрипт отработал на {}%'.format(percent))

counter = 0

self.userdict = userdict

На выходе мы получаем словарь с двойным уровнем вложенности. Данные словаря раскладываются в датасет Pandas, и в последующем преобразуются в понятные и удобочитаемые значения.

Так, для клиента были спарсены и проанализированы ключевые группы Вконтакте на бьюти-тематику. Совокупная аудитория – более полумиллиона человека. В графиках аналитика одной из групп выглядит следующим образом (сбор данных был адаптирован узконаправленно под запросы клиентов).

Вам также может понравиться