Создаем бота для парсинга пользователей Telegram
Traffic Cardinal Traffic Cardinal  написал 27.02.2024

Создаем бота для парсинга пользователей Telegram

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

Telegram уже давно не просто мессенджер, а полноценная соцсеть. Однако, в отличие от большинства социальных сетей, парсинг чего бы то ни было в Telegram на первый взгляд задача невыполнимая.

banner banner

Отчасти это обусловлено образом сверхприватного мессенджера. Кроме того, на это влияет и то, что Telegram все же изначально мессенджером и является. А значит — у него другая архитектура.

Тем не менее прасинг пользователей Telegram — задача вполне выполнимая. Более того, ее можно реализовать без танцев с бубном — штатными средствами самой Телеги. Как? Об этом мы и рассказали ниже.

Какие задачи решает бот для парсинга пользователей

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

  • Сбор базы пользователей для последующих рассылок.

  • Анализ активности аудитории Telegram-каналов.

  • Анализ комментариев пользователей (бот парсит именно комментаторов, чем минимизирует сбор ботов и неактивных пользователей).

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

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

Принцип работы бота для парсинга пользователей Telegram

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

  1. Авторизуйтесь в профиле пользователя.
  2. Считывает указанную ссылку на канал.
  3. Анализирует заданное количество постов.
  4. Если были удаленные посты (пробелы в последовательности ИД постов) — игнорирует их и совершает добавочные итерации.
  5. Анализирует комментарии под каждым постом и создает массив ИД комментаторов.
  6. Сравнивает массив ИД с содержимым файла-лога.
  7. Фильтрует дубли и записывает только новые ИД.

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

Так как бот использует user_api, для начала вам понадобится получить api_id и api_hash, для этого:

  1. Авторизируемся в веб-версии.
  2. Жмем на «API development tools», заполняем поля.
  3. Сохраняем ваши api_id и api_hash в блокнот.

После этого настраиваем наш сервер, поддерживающий возможность развертки Python-скриптов, под работу с Telegram.

  1. Для этого вводим в его консоль следующее:

pip install asyncio

pip install telethon

  1. Затем в корневой папке создаем файл .py с любым названием. Пусть это будет parser.py
  2. Добавляем в наш файл следующий код:

from telethon.sync import TelegramClient

from telethon.tl import types

from telethon.tl.functions.messages import GetHistoryRequest

api_id = 'Замените на ваш API ID' # Замените на ваш API ID

api_hash = 'Замените на ваш API Hash' # Замените на ваш API Hash

phone_number = 'Замените на ваш номер телефона' # Замените на ваш номер телефона

channel_username = 'ЦЕЛЕВОЙ КАНАЛ'

output_file = 'output.txt'

async def main():

try:

# Инициализация клиента

client = TelegramClient('session_name', api_id, api_hash)

# Подключение к серверам Telegram

await client.connect()

# Авторизация пользователя, если необходимо

if not await client.is_user_authorized():

await client.send_code_request(phone_number)

await client.sign_in(phone_number, input('Введите код из СМС: '))

# Получаем идентификатор канала

channel = await client.get_entity(channel_username)

# Получаем последние 10 сообщений из канала (включая посты и комментарии)

messages = await client(GetHistoryRequest(

peer=channel,

limit=10,

offset_date=None,

offset_id=0,

max_id=0,

min_id=0,

add_offset=0,

hash=0

))

# Считываем существующие ИД из файла, если файл существует

existing_ids = set()

try:

with open(output_file, 'r') as file:

for line in file:

existing_ids.add(int(line.strip()))

except FileNotFoundError:

pass # Если файл не существует, игнорируем ошибку

# Список для уникальных ИД комментаторов

unique_comment_user_ids = set()

for message in messages.messages:

post_id = message.id

print(f"Post ID: {post_id}")

# Получаем комментарии к каждому посту

comment_user_ids = set()

try:

async for comment_message in client.iter_messages(channel, reply_to=post_id, reverse=True):

if isinstance(comment_message.sender, types.User):

comment_user_ids.add(comment_message.sender.id)

elif isinstance(comment_message.sender, types.Chat):

comment_user_ids.add(comment_message.sender.id)

except Exception as e:

print(f"Error while processing post ID {post_id}: {e}")

# Исключаем существующие ИД

comment_user_ids -= existing_ids

# Добавляем уникальные ИД в общий список

unique_comment_user_ids.update(comment_user_ids)

# Записываем уникальные ИД комментаторов в файл

with open(output_file, 'a') as file:

for user_id in unique_comment_user_ids:

file.write(f"{user_id}\n")

except Exception as e:

print(f"Error: {e}")

if __name__ == '__main__':

# Запуск асинхронного кода

import asyncio

asyncio.run(main())

  1. Подставляем вместо 'Замените на ваш API ID', 'Замените на ваш API Hash', 'Замените на ваш номер телефона' и 'ЦЕЛЕВОЙ КАНАЛ' — ваш api_id, api_hash, номер к которому привязан аккаунт и ссылку на целевой канал в формате t.me/channel соответственно. Кавычки НЕ УБИРАЕМ!
  2. Сохраняем файл.
  3. Запускаем бот командой:

python parser.py

  1. Авторизуем бота в Телеграме. Для этого при появлении надписи «Please enter your phone (or bot token)» вводим тот же номер, что ранее подставляли в код. После появления надписи «Please enter the code you received» вводим в консоль код из самой Телеги. Бот авторизован.

Демонстрация работы

В качестве «подопытной жертвы» мы выбрали канал МТС Банка.

Бот начал работу. Error как на скриншоте — это штатная работа бота. Так он реагирует на посты, которые отсутствуют. Вывод ошибки сделан сугубо для демонстрации отсутствия удаленных постов.

Содержимое файла output.txt. При желании можно проверить соответствие ИД комментаторов под постами с ИД со скриншота вручную. Проверку на отсутствие дублей можно проверить через Chat GPT.

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

Как видите, спарсерить ID пользователей Telegram из конкретного канала — задача вполне выполнимая. Да, у канала должны быть открыты комментарии. И да, вы спарсите лишь активную часть аудитории. Но для большинства задач нужен именно актив, а не «мертвые души».

Помимо всего прочего, вам никто не мешает закинуть этот код в цикл и перебирать не один канал, а сразу пачку. Почему мы не сделали это за вас? Потому что у Telegram есть лимиты обращений к API, и они не являются публичными. Без понимания того, что вы делаете хотя бы на базовом уровне, одновременный парсинг в несколько потоков, скорее всего, приведет к блокировке вашего аккаунта. Чтобы этого избежать, мы намеренно урезали эту часть функционала. Однако, обладая даже минимальным пониманием в алгоритмизации, закинуть все это дело в цикл будет несложно. А на этом у нас все.

ТОП партнерских программ
Год основания: 2014
Leadbit Nutra - опытная партнерская программа с 900+ офферов на ТОПовые ГЕО. Для вебмастеров представлены COD и Trials&SS офферы на любой вкус.

Ключевые особенности:
- эксклюзивные рекламодатели
- огромный выбор офферов по всему миру
- индивидуальные условия для партнеров
- дружелюбные персональные менеджеры
- программа лояльности с ценными призами
  • Вертикали: 1
  • Офферы: 76
  • Минимум: 50 $
Год основания: 2016
Официальная партнерская программа букмекерской конторы MostBet. Программа запущена в 2016 году. За это время несколько тысяч партнеров привели в Mostbet более 15 000 000 игроков со всего мира. Партнерка специализируется на онлайн-казино и беттинге, а выплаты происходят по моделям CPA и RevShare. У продукта Mostbet есть ряд важных преимуществ, которые неизменно привлекают азартных игроков и позволяют достигать высоких Retention Rate и LTV. Например, на сайте можно найти около 1300 слотов и прочих продуктов казино.

Преимущества:
- Досрочные выплаты по запросу;
- Экспертная поддержка менеджеров,
- Высокая конверсия и LTV;
- Уникальные промо-материалы и прелендинги;
- собственный трекер приложения;
- Демо-счет для игроков на любую сумму;
- Персональный промокод для привлечения игроков.
- Минимальная выплата: 50 $
- Периодичность выплат: по запросу
- Реферальная система: 0%
  • Вертикали: 1
  • Офферы: 8
  • Минимум: 50 $
Год основания: 2013
Shakes.pro — крупная партнерская сеть с 2013 года, отбирает самые выгодные nutra-офферы по всему миру (включая in-house). Является частью крупного холдинга. Забудь о бесконечном поиске офферов! Здесь тебе предлагают только то, что уже приносит реальные деньги на все страны.

Основные преимущества

Гарантированный и высокий апрув. Команда сама решит все вопросы с рекламодателями и поделится качественными промо с локализацией.
3 программы лояльности, с которыми ты будешь получать ценные призы за каждый лид.
Ежеквартальные подборки офферов с подробной аналитикой, которые успешнее других по доходам.
  • Вертикали: 1
  • Офферы: 23
  • Минимум: 3000 ₽
Год основания: 2014
Не нашли подходящий оффер? Не беда, подключим под вас

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

Ключевые особенности:
• Family партнерка. Решим любые боли наших вебмастеров
• Индивидуальные условия работы по любым офферам. Наличие капов
• Выплаты по запросу, без выходных и праздников
• Собственный store с шикарными призами
• Выдаем прилы под iOS/android, готовые крео под залив, аудитории таргетинга
• Максимально подробная статистика, обновляемая в режиме Real-Time
• Саппорт, личный менеджер 24/7
  • Вертикали: 2
  • Офферы: 649
  • Минимум: 50 $
LGaming — это партнерская сеть в вертикали беттинг и гемблинг с более чем 1000 активными офферами от 200 рекламодателей. В партнерке доступен инхаус-продукт BetAndreas. Сеть LGaming создана командой, за плечами которой несколько лет опыта в гемблинг-вертикали CPA-сети Leadbit. Партнерская сеть предлагает проверенные креативы с высоким конвертом и рекомендации по проливу от отдела баинга. Также у компании есть собственный бренд и партнерский сервис по выдаче виртуальных карт.
  • Вертикали: 1
  • Офферы: 1000+
  • Минимум: 100 $
Комментарии
0
Написать комментарий

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