Traffic Cardinal Traffic Cardinal написал 30.11.2022

Анализируем аудиторию: бот-парсер для VK своими руками

Traffic Cardinal Traffic Cardinal написал 30.11.2022
7 мин
0
3899
Содержание

Таргетированная реклама — проверенный временем инструмент. Но в случае с VK аудитория многих пабликов — фейки. Чтобы не растрачивать бюджет впустую — создадим бота, который будет анализировать аудиторию паблика. Напомним, что ранее мы уже создавали бота-говорилку для VK — советуем ознакомиться с материалом и более детальным разбором особенностей создания ботов для VK.

banner banner

*Спойлер: готовый исходный код — в конце статьи.

Какие задачи решает бот

Данный бот предназначен для непосредственной оценки потенциала аудитории пабликов VK для рекламных целей. Для этого бот:

  • Парсерит список участников сообществ.

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

  • Сопоставляет полученную информацию.

  • Выводит процентные значения.

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

Принцип работы бота

Принцип работы бота следующий:

  • Бот получает сообщение от пользователя с адресом группы.

  • Парсит аудиторию паблика.

  • Проверяет каждого пользователя на бан VK.

  • Проверяет каждого пользователя на наличие фотографии.

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

  • Проверяет каждого пользователя на дату регистрации.

  • Возвращает в ЛС сообщение с процентным соотношением «фейковых» пользователей к общему числу подписчиков.

Пошаговая инструкция, как создать парсер аудитории VK

  1. Сперва вам нужно получить токен. Важное уточнение — токен дает полный доступ к странице, так что советуем использовать не основной профиль.
  2. Затем авторизируемся в pythonanywhere.
  3. Инициируем запуск Bash-консоли.
  1. Дожидаемся загрузки машины.
  2. Ждем подтверждения загрузки.
  1. Патчим машину под VK API, для этого прописываем:

pip3.9 install vk_api

  1. Открываем блокнот или другой текстовый редактор, вводим:

import vk_api

import requests

from vk_api.longpoll import VkLongPoll, VkEventType

import time

import json

from bs4 import BeautifulSoup

import datetime as DT

token="ваш токен"

bh = vk_api.VkApi(token = token)

give = bh.get_api()

longpoll = VkLongPoll(bh)

time = time.time()

def blasthack(id, text):

bh.method('messages.send', {'user_id' : id, 'message' : text, 'random_id': 0})

def ras4eti(s):

bs4et=0

bs4etn=0

fs4et=0

fs4etn=0

ls4et=0

ls4etn=0

rs4et=0

rs4etn=0

users=0

timetest=time-2629743

count = requests.get('https://api.vk.com/method/groups.getMembers', params={

'access_token':token,

'v':5.103,

'group_id': s,

'sort':'id_desc',

'offset':0,

'fields':'last_seen'

}).json()['response']['count']

get_offset=count//1000

good_id_list = []

max_offset = get_offset

if max_offset == 0:

max_offset=1

offset = 0

while offset < max_offset:

response = requests.get('https://api.vk.com/method/groups.getMembers', params={

'access_token':token,

'v':5.103,

'group_id': s,

'sort':'id_desc',

'offset':offset,

'fields':'last_seen'

}).json()['response']

offset += 1

for item in response['items']:

good_id_list.append(item['id'])

with open('users.txt', 'w') as f:

for item in good_id_list:

f.write("%s\n" % item)

blasthack(id, 'Парсинг завершен, приступаю к анализу (может занять много времени)')

file1 = open("users.txt", "r")

while True:

# считываем строку

line = file1.readline()

users=users+1

# прерываем цикл, если строка пустая

if not line:

break

# выводим строку

a=line.strip()

good_id_list = []

response = requests.get('https://api.vk.com/method/users.get', params={

'access_token':token,

'v':5.103,

'user_id': a,

'fields':'last_seen,has_photo'

}).json()['response']

aList = json.dumps(response)

x = aList.split(",")

cbt=x[2]

if str(cbt) == str(' "deactivated": "deleted"'):

bs4et=bs4et+1

else:

bs4etn=bs4etn+1

if str(x[1]) != ' "has_photo": 1':

fs4et=fs4et+1

else:

fs4etn=fs4etn+1

x[2] = x[2][:-1]

if str(x[2]) != ' "last_seen": {"platform": ':

ls4et=ls4et+1

else:

g=str(x[3])

s = g

s=s.replace(' "time": ', '')

s=s.replace('}', '')

if int(s)-time > timetest:

ls4et=ls4et+1

else:

ls4etn=ls4etn+1

response = requests.get('https://vk.com/foaf.php?id='+a)

xml = response.text

soup = BeautifulSoup(xml, 'lxml')

created = soup.find('ya:created').get('dc:date')

dt = created

dt = dt.replace("+03:00", "")

dt = dt.replace("T", " ")

dt = DT.datetime.strptime(dt, '%Y-%m-%d %H:%M:%S')

dt=dt.timestamp()

dt=int(dt)

if dt-time>94670778:

rs4et=rs4et+1

else:

rs4etn=rs4etn+1

#закрываем файл

file1.close

prob=int(bs4et/users*100)

prof=int(fs4et/users*100)

prol=int(ls4et/users*100)

pror=int(rs4et/users*100)

print (prob)

print (prof)

print (prol)

print (pror)

blasthack(id, 'Анализ завершен. \nВ паблике: '+s+'\nЗабаненных акков: '+str(prob)+'% ('+str(bs4et)+')\nАкков без фото: '+str(prof)+'% ('+str(fs4et)+')\nАкков не заходивших в сеть 30+ дней: '+str(prol)+'% ('+str(ls4et)+')\nАкков зарегистрированных менее 3 лет назад: '+str(pror)+'% ('+str(rs4et)+')')

response=0

for event in longpoll.listen():

if event.type == VkEventType.MESSAGE_NEW:

# Чтобы наш бот не слышал и не отвечал на самого себя

if event.to_me:

# Для того чтобы бот читал все с маленьких букв

message = event.text.lower()

# Получаем id пользователя

id = event.user_id

s = message

response=0

try:

response = requests.get('https://api.vk.com/method/groups.getMembers', params={

'access_token':token,

'v':5.103,

'group_id': s

}).json()['response']

except: response != "error"

if response == 0:

blasthack(id, 'Паблик с таким ID не существует')

if response != 0:

blasthack(id, 'Парсим аудиторию паблика: \n' +s)

ras4eti(s)

  1. Указываем токен вместо “ваш токен”.
  2. Сохраняем код как bot.py.
  1. Грузим скрипт на сервер.
  1. Инициируем запуск bot.py.
  1. Тестируем парсер.

Исходный код

Ссылка на скачивание исходного кода

Подводя итоги

Как видите, создать собственный парсер для анализа аудитории не сложно — надеемся, он поможет вам в настройке таргетинга и сэкономит ваш бюджет.

Здравствуйте! У вас включен блокировщик рекламы, часть сайта не будет работать!