Как спарсить подписчиков телеграмм канала
Перейти к содержимому

Как спарсить подписчиков телеграмм канала

  • автор:

 

Парсинг telegram каналов для агрегатора контента на PHP

Несколько лет назад я начал разрабатывать свой агрегатор контента, что бы упростить свой серфинг в сети. Изначально я парсил только rss, vk и facebook, но в прошлом году решил сделать полный рефакторинг проекта: отказаться от парсинга на клиенте, сделать нормальный back-end, использовать базу данных для хранения данных и расширить список поддерживаемых ресурсов.

Помимо стандартного набора из rss, fb, vk, twitter, instagram, youtube я добавил поддержку произвольных открытых каналов из telegram.

image

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

[UPDATE 2019-03-12]
Мой новый пост про парсинг телеграм каналов: habr.com/ru/post/354000. Более качественный код, микросервисы с открытым исходным кодом и новый публичный сервер для тестов.

Изначально я предполагал, что парсить каналы можно через популярный BotApi, на который имелось много инструкций в сети. Но оказалось, что для того, что бы бот мог читать какой-то канал — бота надо в этот канал добавить. Для сторонних каналов этот вариант не возможен. Я перешел к чтению мануалов на основной API телеграма.

Через 30 минут изучения документации я был в отчаянии. Все данные у телеграма шифруются, что бы получить что то от их серверов нужно обладать степенью магистра по криптографии… А еще вместо http запросов используется socket, с которым я ранее не сталкивался. Вообщем чистый хардкор и никаких внятных примеров в сети… Это было почти фиаско.

Последней надеждой было найти какое-то готовое решение. И тут, наконец, удача мне улыбнулась. На сайте telegram я наткнулся на ссылку на неофициальный opensource php клиент. Да-да! Можно использовать telegram под php, и там даже есть поддержка звонков! Это чудо называется madelineProto. Оно может подключаться к серверам используя криптографическую магию и отдавать нужные мне данные в виде нормального, человеческого ассоциативного массива.

Я приступил к настройке php клиента.

1. Регистрация своего клиента.

К сожалению, в начале поста я вас обманул и нам всеже потребуется регистрация и смс авторизация в телеграме…

Если аккаунт в телеграме уже есть, остается зарегистрировать свое приложение/клиент, и получить ключи для доступа к серверам telegram.

Это стандартная процедура, похожая на аналогичную у соц. сетей для доступа к API. Инструкция для создания своих ключей.

После регистрации клиента нам потребуются только «App api_id» и «App api_hash» со страницы my.telegram.org/apps

2. Установка madelineProto.

Для работы требуется php7, но в Readme написано, что есть способ запустить на php5.6.

С запуском на MacOs с php7 из пакета Mamp, и простеньком хостинге за 150 руб в мес проблем не возникло.

Процесс не хитрый: скачать релиз, установить зависимости через composer и можно приступать к настройке.

Для уменьшения размера я удалил лишние зависимости и оставил только danog, paragonie и phpseclib. На работе клиента это никак не сказалось.

3. Настройка madelineProto и первый запуск.

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

На этом этапе потребуется авторизовать новое подключение и ввести код верификации, который придет в ранее авторизованный telegram клиент. Запускать код желательно из консоли (но есть и веб режим). Если настраиваете клиент для другого человека, то нельзя пересылать код авторизации через telegram, иначе он будет аннулирован. Но можно пересылать его в виде скриншота или писать текстом.

Количество авторизаций, которые можно запросить, ограничено. Если что-то не срабатывает — не стоит много раз подряд запускать код, иначе Телеграм заблокирует отправку подтверждений на сутки или более.

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

В корне проекта будут создан файл «session.madeline», в котором, в бинарном виде, будут храниться данные нашей сессии. При повторном запуске авторизовываться заново не придется. Возобновление сессии работает довольно быстро. У меня на инициализацию клиента уходит около 800 мс на зарубежном сервере.

Для обновления настроек достаточно обновить массив и перезапустить скрипт. Удалять файл сессии не требуется.

4. Получение постов из произвольного открытого telegram канала.

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

После выполнения мы получаем массив с нужным нам количеством сообщений/постов, разбитых по каналам. Так же передаются данные о медиа-вложениях.

Дальше остается сохранить текст поста, при наличии фото/видео получить превью и подпись к медиа файлу и сформировать ссылку для просмотра поста.

4. Получение медиа-вложений.

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

Ну а дальше все просто:

На этом парсинг закончен и можно сохранять посты в базу или вывести на странице.

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

Парсим телегу. Как собирать имена участников чатов в Telegram

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

Как извес­тно, в «Телег­раме» есть чаты и каналы, куда, быва­ет, набива­ется мно­жес­тво поль­зовате­лей. Иног­да весь­ма полез­но иметь их спи­сок, нап­ример для каких‑то рас­сылок и приг­лашений.

Обыч­но под сло­вом «пар­синг» в кон­тек­сте телеги понима­ется имен­но получе­ние спис­ка поль­зовате­лей канала или чата. Реже — получе­ние еще и спис­ка сооб­щений.

Каналы

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

По­лучить спи­сок под­писчи­ков канала без при­вязан­ного к нему чата с ком­мента­риями мож­но, толь­ко если это твой канал и у него мень­ше 200 под­писчи­ков. Если хотя бы одно из этих усло­вий не выпол­няет­ся, пар­синг недос­тупен чис­то тех­ничес­ки и ник­то не смо­жет его про­вес­ти, что бы тебе ни обе­щали. Воз­можно, в будущем появят­ся какие‑то новые спо­собы — легаль­ные или с исполь­зовани­ем дыр, но пока рабочих спо­собов нет.

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

Что каса­ется спис­ка сооб­щений в канале, то его мож­но получить как прог­рам­мно, через API «Телег­рама», так и вруч­ную, экспор­тировав спи­сок сооб­щений с помощью штат­ного кли­ента.

С чатами гораз­до инте­рес­нее. Вруч­ную вытащить спи­сок юзе­ров через стан­дар­тный кли­ент не получит­ся, раз­ве что сидеть с блок­нотом и руч­кой и выписы­вать всю инте­ресу­ющую информа­цию. Спо­соб не очень, так что при­дет­ся пос­мотреть в сто­рону род­ного API Telegram или, если хочешь упростить себе жизнь, на какую‑нибудь биб­лиоте­ку, нап­ример Telethon.

В Telethon есть фун­кция GetParticipantsRequest, которая получа­ет на вход некую сущ­ность (entity), а на выходе выда­ет спи­сок поль­зовате­лей.

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

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Сбор информации о подписчиках Telegram-канала

На 2021 год боты в Telegram так и не имеют метода, позволяющего получать информацию о подписчиках канала. Тем не менее, существует достаточно сложное в освоении Telegram API и построенная на нём библиотека Telethon. Сегодня мы посмотрим, как при помощи библиотеки выгрузить информацию о подписчиках своего канала.

Создание приложения

Для начала необходимо создать приложение, через которое будут отправляться запросы к API. Перейдите на https://my.telegram.org и авторизуйтесь в Telegram-аккаунте:

После успешной авторизации перейдите на страницу API development tools:

Заполните все поля и жмите на создание приложения:

Из полученной конфигурации нам необходим app api_id и app api_hash:

Запрос к API

Импортируем telethon — он поможет сформировать запрос, и pandas — полученный ответ мы запишем в DataFrame.

Вводим api_id, api_hash, наш номер телефона и ссылку на канал, информацию о подписчиках которого хотим получить. Доступ к информации о подписчиках есть только у администраторов канала.

Создаём новую сессию — вместо session_name можно подставить любое другое название. Методы в библиотеке работают асинхронно, поэтому ответа от них требуется ожидать:

Собираем все каналы текущего пользователя. Из ссылки забираем часть с именем канала и вытаскиваем из словаря нужный:

Подписчиков, доступ к которым не ограничен приватностью, можно получить методом get_participants. С 20 июля 2018 года Telegram установил ограничение в 200 подписчиков для вызова метода, и установка параметра aggressive на True поможет получить всех подписчиков за раз.

Из полученных библиотечных структур извлекаем информацию о пользователях — их имена и телефоны:

Из четырёх списков собираем DataFrame и пишем его в csv-таблицу:

Результат работы — такая таблица:

Для запуска в Jupyter Notebook описанный ниже код можно просто вставить в ячейку, но при запуске из Python-файла будет такая ошибка:

Устранить проблему можно, записав весь код в асинхронную функцию. Целиком выглядеть код будет так:

Что-то не работает. Ругается: SyntaxError: ’await’ outside function

Добрый день! Проверили способ прямо сейчас — у нас всё работает. Пришлите, пожалуйста, свой код (можно через gist.github.com) и версию Python.

Да я вообще не очень разбираюсь в Python’е. Только начал учить буквально на днях. Парсер чатов-то сделал, но там попроще было (на другом сайте), а сейчас понадобился для дела свой канал собрать, а там такие камни подводные 🙂

В Python вовсе необязательно разделять отдельные участки кода на функции, как, например, в C 🙂 Попробуйте написать без них, просто записывая последовательно все команды из материала в файл — должно получиться вот так: https://gist.github.com/Elisejj/aec7867e5da55e295d148882ae41488c

Если так делать, то он снова на await ругается: SyntaxError: ’await’ outside function

Я ж с такой «атаки в лоб» и начинал 🙂 В общем, вот такое решение у меня работает (всё парсит и файл сохраняет): https://gist.github.com/Mnsrff/9cba7a3231034fac900dd00b692d7c0f

Но хотелось бы разобраться, почему так 🙂 Почему у вас без функций всё работает, а я вынужден был всё в них заворачивать и вызывать 🙂 Python 3.7 у меня. Библиотеки установлены.

Добрый день. Спасибо за код.
А с чем может быть связано несовпадение количества участников группы и количество выгруженных? Подписчики могут где-то ограничить приватность и не светиться в группах?
А то у меня из 574 юзеров выгружается только 470, хотя последний элемент в members_telethon_list total равняется 574.

 

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

Максим Игоревич 2021

Добрый день.
Подскажите пожалуйста, как вытащить ID юзеров.

Максим Игоревич 2021

Михаил Артемьев 10 мес

Подскажите, есть ли способ получить список подписчиков канала, которые были удалены?

насколько мне известно, нет, увы, их уже не получить

Ольга Телюкова 9 мес

Мы пробрасываем лиды из ФБ в телегу и гугл таблицы через Webjack. Сервис работает как часы.
Можно получить месяц халявы и бесплатную настройку по промокоду semen21, напишите его в чат техподдержки на сайте

Здравствуйте! Подскажите пожалуйста, возможно ли узнать, кто-нибудь мог таким образом спарсить подписчиков с моего канала?

вся статья об этом, вы ее читали?

Читал, но ничего не понял)))
У меня есть канал, и ощущение что один из админов спарсил моих подписчиков. Могу ли я как-то это проверить.
П.С.: Извиняюсь, если мой вопрос для Вас совсем тупой. Я чукча)

Роман Лыжов 7 мес

Добрый день
У меня почему-то выдает ошибку:

KeyError Traceback (most recent call last)
C:\Users\Public\Documents\Wondershare\CreatorTemp/ipykernel_7648/3941792516.py in <module>
15 if d.is_channel>
16 my_channel = channel_href.split(’/’)[-1]
—-> 17 channel = channels[my_channel]
18
19 members_telethon_list = await client.get_participants(channel, aggressive=True)

Хотя канал существует, при выполнении даже был запрос на авторизацию с подтверждением через телеграм.
Канал @TestChannelRomanLyzhov свежесозданный, для теста.
Сможете помочь?

А у меня не находит ваш канал: TestChannelRomanLyzhov. Он доступен в паблике?

Привет, у меня выскакивает вот такая ошибка DeprecationWarning: There is no current event loop
loop = asyncio.get_event_loop() в чём дело и как сделать чтобы ко работал

Здравствуйте. Можно ли парсить телеграм каналы в которых я состою в свой личный?
Допустим у меня будут два моих канала в 1ый- будут рассылаться сообщения, картины которые парсит бот, чтобы я там мог редактировать(к примеру парсит картину и цену товара и мне нужно в своем 1ом канале иметь доступ к редактированию) и во 2ой канал уже будет рассылаться готовый контент.
Заране спасибо за ответ)

Добрый день!
Выскакивает ошибка :

telethon.errors.rpcerrorlist.BotMethodInvalidError: The API access for bot users is restricted. The method you tried to invoke cannot be executed as a bot (caused by GetDialogsRequest)

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

А что мешает добавить бота в свой канал?

В этом и суть, канал не мой)

Тогда у вас ничего не выйдет. Это метод для работы с собственным каналом

Здравствуйте, смогу ли я спарсить подписчиков с канала, в котором я администратор, а не владелец?

Руслан Трифонов 5 мес

Добрый день! Не могу получить данные на этапе создания нового приложения, ничего не происходит https://prnt.sc/_bby94Pk7OR3 нажимаю ок и все, дальше ничего нет.

Ну, это вам в суппорт Телеграмма

Ivan Mashtalov 5 мес

Такую ошибку выдает:
line 11
client = TelegramClient(’session_name’, api_id, api_hash)
TabError: inconsistent use of tabs and spaces in indentation

Очевидно, что у вас что-то не так с индентацией?

Здравствуйте, уже который месяц пытаюсь решить проблему которые вы описываете в этом посте. Но однако ваш метод не является рабочим в данный момент. Список участников канала как был ограничен 200 сотнями так и остается, если я конечно же все правильно понимаю.

Не понял, что за ограничение в 2 сотни? у меня ограничения на выгрузку не было.

Это снова я, пытаюсь достать списко своих подписчиков которых сейчас 500. Если добавляюАГРЕССИВ = true вылазит такая ошибка.
telethon.errors.common.MultiError: ([None, None, FloodWaitError(’A wait of 30 seconds is required (caused by GetParticipantsRequest)’), None, FloodWaitError(’A wait of 30 seconds is required (caused by GetParticipantsRequest)’), FloodWaitError(’A wait of 30 seconds is required (caused by GetParticipantsRequest)’), FloodWaitError(’A wait of 30 seconds is required (caused by GetParticipantsRequest)’), FloodWaitError(’A wait of 30 seconds is required (caused by GetParticipantsRequest)’), FloodWaitError(’A wait of 30 seconds is required (caused by GetParticipantsRequest)’), FloodWaitError(’A wait of 30 seconds is required (caused by GetParticipantsRequest)’), FloodWaitError(’A wait of 30 seconds is required (caused by GetParticipantsRequest)’), FloodWaitError(’A wait of 30 seconds is required (caused by GetParticipantsRequest)’), FloodWaitError(’A wait of 30 seconds is required (caused by GetParticipantsRequest)’), FloodWaitError(’A wait of 30 seconds is required (caused by GetParticipantsRequest)’), F[<telethon.tl.types.channels.ChannelParticipants object at 0x0000021E5B8EB130>, <telethon.tl.types.channels.ChannelParticipants object at 0x0000021E5B8E37F0>, None, <telethon.tl.types.channels.ChannelParticipants object at 0x0000021E5B8E7E50>, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None], [<telethon.tl.functions.channels.GetParticipantsRequest object at 0x0000021E5B7E1BB0>, <telethon.tl.functions.channels.GetParticipantsRequest object at 0x0000021E5B7E1C70>, <telethon.tl.functions.channels.GetParticipantsRequest object at 0x0000021E5B7E1D30>,

Николай, благодарю за статью, код работает!
Но агрессив не получается применить на группе, у меня там 14к человек, он пишет, что слишком много попыток, и дропает парсинг.
Можете проверить, как это работает сейчас?
Буду признателен, если подскажете, как это обойти.

Телеграм парсеры – быстрый сбор информации об аудитории

П арсеры появились в мире интернета для того, чтобы автоматизировать долгие рутинные процессы по сбору информации. Первыми я застал парсеры электронных ящиков, а воспользовался – парсерами Instagram-аккаунтов .

Сейчас на первый план выходит Телеграм и разработчики программного обеспечения позаботились о том, чтобы парсеры появились и тут.

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

Цели бывают разными:

    ;
  • спам;
  • информирование клиентов;
  • инвайтинг (приглашение участников по логинам, без их предварительного предупреждения. Это запрещено, можно получить блокировку аккаунта).

Рассылки тоже не приветствуются: любой может поставить на них отметку "Спам" и модераторы Telegram примут меры. Варианта два:

  • временная блокировка возможности отправлять сообщения вне списка контактов;
  • постоянная блокировка возможности входа в текущий аккаунт.

��‍♀️ Несмотря на возможные ограничения и запреты, бизнес и администраторы используют парсинг в своих целях. Существуют способы обхода ограничений, среди которых организация сети аккаунтов. С них осуществляются все запрещенные мессенджером действия.

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

Сервисы и скрипты могут предложить парсинг:

  • групп;
  • контактов;
  • чатов.

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

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

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

Сервисы

Сегодня парсеры существуют в виде сервисов и ботов. Для Telegram их не так много, функциональность не сильно отличается, а цена нередко завышена. Если использовать парсер для решения простых, распространенных задач, подойдет готовый вариант.

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

Telegram Soft

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

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

Цены : существует 3 варианта лицензий: демо (на 5 часов) – 500 руб., на месяц – 7450 руб., безлимит (навсегда) – 14 950 руб.

Telecobra

Не только парсер, но и профессиональный софт для комплексного продвижения в Telegram с использованием собранных данных.

Собирает из чатов и групп пользователей, учитывая разные критерии:

  • ID;
  • бот или нет;
  • имя;
  • фамилия;
  • логин;
  • язык;
  • статус;
  • активность.

Условием получения полной информации является условие: сбор должен осуществляться с аккаунта администратора. Собранные данные можно использовать или сохранить в текстовом или табличном формате.

Цены : лицензия на месяц обойдется в 3 645 руб., но программу можно выкупить за 18 645 руб.

A-Parser

Агрегатор множества парсеров в социальных сетях, интернет-магазинах и поисковиках. Умеет парсить из Телеграм, но только в группах.

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

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

Telereg

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

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

Telecobrabot

Telecobrabot — бесплатный бот мультипарсинга в Телеграм. Поддерживает все типы ссылок. Результат парсинга сохраняется в csv файл.

  • всех участников группы;
  • активных (все, кто в данный момент онлайн);
  • неактивных (все, кто в данный момент оффлайн);
  • админов.

Помимо участников группы, бот умеет парсить сообщения.

�� Для тех, кто хочет перелить аудиторию из группы себе в канал есть IPO модуль.

ParserFree2Bot

Бесплатный бот-парсер, работающий только с группами. Для парсинга нужно просто вставить ссылку на нужную группу. Процесс занимает секунды, ждать долго не приходится.

  • всех участников группы;
  • активных;
  • неактивных.

Использование полностью бесплатное, но есть реклама. Для использования обязательна подписка на спонсора.

Парсинг под заказ

Среди фрилансеров обязательно есть специалисты в Telegram API. В случае необходимости использования сбора данных одноразово, они могут помочь за небольшую плату.

��‍♀️ В зависимости от сложности исполнители указывают разную стоимость. Например, для решения простой задачи ценник будет 500 руб., а парсинг контента с видео, фото и аудио поднимает стоимость до 1500 руб.

Разработка

Парсер можно разработать самому или заказать у разработчиков на фрилансе. Первый вариант подходит тем, кто хоть немного понимает в программировании, в частности — в PHP или Python . Перед началом изучите документацию Telegram API .

Заказать разработку парсера можно начиная с 500 руб., но стоит учитывать особенности низкой цены. За 500 руб. можно получить элементарный парсер, на который проще найти готовый код в интернете, а уже за 2000 руб. — программу с графическим интерфейсом и минимальным набором функций.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *