• VLMI - форум по обмену информацией. На форуме можете найти способы заработка, разнообразную информацию по интернет-безопасности, обмен знаниями, курсы/сливы.

    После регистрации будут доступны основные разделы.

    Контент форума создают пользователи, администрация за действия пользователей не несёт ответственности, отказ от ответственности. Так же перед использованием форума необходимо ознакомиться с правилами ресурса. Продолжая использовать ресурс вы соглашаетесь с правилами.
  • Подпишись на наш канал в Telegram для информации о актуальных зеркалах форума: https://t.me/vlmiclub

Парсер данных из Telegram чатов на Python

BotHub

Разработчик ботов

BotHub

Разработчик ботов
Резидент
Сообщения
285
Реакции
420
0 руб.
Telegram
Для парсинга нам понадобится Python 3 версии.

Для начала переходим на сайт https://my.telegram.org и создаем приложение, запоминаем API ID и API HASH.

Устанавливаем зависимости

pip3 install --upgrade pyrogram
pip3 install --upgrade tgcrypto


Создаем 2 файла: main.py, config.ini
И 2 папки: session и chats (Названия смогут быть любыми, созданы для удобства и порядка)

В config.ini пишем следующие данные

[pyrogram]
api_id = 1234567
api_hash = bf243ef2d7224ebc6effj42718e5bb68


api_id, api_hash получены при регистрации приложения

Переходим к main.py

Код:
import time
import json
from pyrogram import Client
from pyrogram.api.errors import FloodWait

app = Client('session', workdir='./session') # Настройки сессии клиента
chat = '' # Название чата или его ID
string_format = '' # Формат строки для записи

def parser(id):
  """ Функция парсинга пользователей """
  members = []
  offset = 0
  limit = 200

  while True:
    try:
      chunk = app.get_chat_members(id, offset)
    except FloodWait as e:
      time.sleep(e.x)
      continue
    if not chunk.chat_members:
      break
   
    members.extend(chunk.chat_members)
    offset += len(chunk.chat_members)

  return members

def template(data, template):
  """ Функция нормализатора строк """
  data = json.loads(str(data))
  data['user'].setdefault('first_name', '-')
  data['user'].setdefault('last_name', '-')
  data['user'].setdefault('username', '-')
  data['user'].setdefault('phone_number', '-')
  return template.format(id=data['user']['id'],
                         first_name=data['user']['first_name'],
                         last_name=data['user']['last_name'],
                         username=data['user']['username'],
                         phone_number=data['user']['phone_number'],
                         status=data['status'])

def wfile(data, template_format, path):
  """ Функция записи строк в файл """
  with open(path, 'w', encoding='utf8') as file:
    file.writelines('Количество пользователей: {0}\n\n'.format(len(data)))
    file.writelines([template(user, template_format) for user in data])

def main():
  with app:
    data = parser(chat)
    wfile(data, string_format, './chats/{0}.txt'.format(chat))
    print('Сбор данных закончен!')

if __name__ == '__main__':
  main()

Заполняем данные
chat = '' # Название чата или его ID
string_format = '' # Формат строки для записи


Заполнять только название или ID чата если известно, без https://t.me/

Формат строки - это настройки строки с полученными данными. В скрипт заложены следующие шаблоны.
{id} - ID пользователя
{first_name} - Имя пользователя
{last_name} - Фамилия (Если указана)
{username} - Ник пользователя (Если указан)
{phone_number} - Номер телефона (Если пользователь есть в вашей телефонной книге)
{'status} - Статус пользователя в данном чате (Создатель, Администратор или пользователь)

Можно и нужно использовать разделители и перенос строк (\n)

К примеру нужно получить все ID и их имена ID: {id} \n Имя: {first_name}\n\n

В папке chats получаем список с таким содержанием.
Первая строка количество участников, далее запрошенная вами информация.

Количество пользователей: 156

ID: 1234567
Имя: Иван


ID: 1234567
Имя: Максим


и т.д

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

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

Задавайте вопросы. Приятного вечера.
 

BotHub

Разработчик ботов

BotHub

Разработчик ботов
Резидент
Сообщения
285
Реакции
420
0 руб.
Telegram
Это кстати не от скрипта зависит, таковы лимиты у Telegram для чатов и групп до 10к участников последних вступивших. Интересно было бы узнать реализацию слива всей группы к примеру если их 50-100к и т.д.
Я сливал пользователей именно по сообщениям в группе, но тогда приходиться все сообщения группы перебрать.
Распиши пожалуйста, есть ли еще варианты слива?
Есть еще одна реализация, грабит по именам пользователей, тогда можно уже свыше 10 000 парсить
 

BotHub

Разработчик ботов

BotHub

Разработчик ботов
Резидент
Сообщения
285
Реакции
420
0 руб.
Telegram

Ааиотпав

Новичок
Сообщения
1
Реакции
0
0 руб.

BotHub

Разработчик ботов

BotHub

Разработчик ботов
Резидент
Сообщения
285
Реакции
420
0 руб.
Telegram
Как сделать файл .session роскажи пожалуйста?
Он создаётся сам, в тот момент когда вы первый раз запускаете скрипт, у вас спросит номер телефона, от аккаунта, через какой будете работать, потом спросит код, который вам придёт в тот момент или от бота самого телеграм или по смс на тот номер телефона, после ввода кода, файл сессии создаётся сам и последующие запуски не требуют процедуры привязки аккаунта. Этот файл можно переносить или использовать в других скриптах, работающих с модулем Pyrogram
 

BotHub

Разработчик ботов

BotHub

Разработчик ботов
Резидент
Сообщения
285
Реакции
420
0 руб.
Telegram
ссылка битая, есть актуальная информация как собрать 10к+ участников?
а как парсить закрытые группы имея инвайт ссылку?
Давайте ссылки на группы от 10к, буду смотреть что можно сделать.
 

Nippers

Новичок
Сообщения
2
Реакции
1
0 руб.
Telegram
Парсер конечно пушка! ?
 

mainSEO4all

Новичок
Сообщения
1
Реакции
0
0 руб.
Telegram
Не знаю почему но не работает выдает ошибку
Я не большой еще специалист в этом вопросе буду признателен если поможете.


Traceback (most recent call last):
File "/Users/seo_empireх/PycharmProjects/ParcerTelebot/main.py", line 63, in <module>
main()
File "/Users/seo_empireх/PycharmProjects/ParcerTelebot/main.py", line 56, in main
with app:
File "/Users/seo_empireх/PycharmProjects/ParcerTelebot/PT/lib/python3.7/site-packages/pyrogram/client/client.py", line 250, in __enter__
return self.start()
File "/Users/seo_empireх/PycharmProjects/ParcerTelebot/PT/lib/python3.7/site-packages/pyrogram/client/client.py", line 281, in start
self.load_config()
File "/Users/seo_empireх/PycharmProjects/ParcerTelebot/PT/lib/python3.7/site-packages/pyrogram/client/client.py", line 1003, in load_config
"No API Key found. "
AttributeError: No API Key found. More info: https://docs.pyrogram.org/intro/setup#configuration

Очевидно что не видит Апи ключ, хотя все сделал ка положено
 

qwerty112

Новичок
Сообщения
1
Реакции
0
0 руб.
Не знаю почему но не работает выдает ошибку
Я не большой еще специалист в этом вопросе буду признателен если поможете.


Traceback (most recent call last):
File "/Users/seo_empireх/PycharmProjects/ParcerTelebot/main.py", line 63, in <module>
main()
File "/Users/seo_empireх/PycharmProjects/ParcerTelebot/main.py", line 56, in main
with app:
File "/Users/seo_empireх/PycharmProjects/ParcerTelebot/PT/lib/python3.7/site-packages/pyrogram/client/client.py", line 250, in __enter__
return self.start()
File "/Users/seo_empireх/PycharmProjects/ParcerTelebot/PT/lib/python3.7/site-packages/pyrogram/client/client.py", line 281, in start
self.load_config()
File "/Users/seo_empireх/PycharmProjects/ParcerTelebot/PT/lib/python3.7/site-packages/pyrogram/client/client.py", line 1003, in load_config
"No API Key found. "
AttributeError: No API Key found. More info: https://docs.pyrogram.org/intro/setup#configuration

Очевидно что не видит Апи ключ, хотя все сделал ка положено
Скинь код, посмотрю что там у тебя не так
 

cosmosolomon

Новичок
Сообщения
1
Реакции
0
0 руб.
import time
import json
from pyrogram import Client
from pyrogram.errors import FloodWait

app = Client('session', workdir='./session') # Настройки сессии клиента
chat = 'askYH' # Название чата или его ID
string_format = '\n' # Формат строки для записи


def parser(id):
""" Функция парсинга пользователей """
members = []
offset = 0
limit = 200

while True:
try:
chunk = app.get_chat_members(id, offset)
except FloodWait as e:
time.sleep(e.x)
continue
if not chunk.chat_members:
break

members.extend(chunk.chat_members)
offset += len(chunk.chat_members)

return members


def template(data, template):
""" Функция нормализатора строк """
data = json.loads(str(data))
data['user'].setdefault('first_name', '-')
data['user'].setdefault('last_name', '-')
data['user'].setdefault('username', '-')
data['user'].setdefault('phone_number', '-')
return template.format(id=data['user']['id'],
first_name=data['user']['first_name'],
last_name=data['user']['last_name'],
username=data['user']['username'],
phone_number=data['user']['phone_number'],
status=data['status'])


def wfile(data, template_format, path):
""" Функция записи строк в файл """
with open(path, 'w', encoding='utf8') as file:
file.writelines('Количество пользователей: {0}\n\n'.format(len(data)))
file.writelines([template(user, template_format) for user in data])


def main():
with app:
data = parser(chat)
wfile(data, string_format, './chats/{0}.txt'.format(chat))
print('Сбор данных закончен!')


if __name__ == '__main__':
main()


Все сделал как положено,не работает.Можете помочь?
 

vahner

Новичок
Сообщения
2
Реакции
0
0 руб.
Страница Вконтакте
Telegram
import time
import json
from pyrogram import Client
from pyrogram.errors import FloodWait

app = Client('session', workdir='./session') # Настройки сессии клиента
chat = 'askYH' # Название чата или его ID
string_format = '\n' # Формат строки для записи


def parser(id):
""" Функция парсинга пользователей """
members = []
offset = 0
limit = 200

while True:
try:
chunk = app.get_chat_members(id, offset)
except FloodWait as e:
time.sleep(e.x)
continue
if not chunk.chat_members:
break

members.extend(chunk.chat_members)
offset += len(chunk.chat_members)

return members


def template(data, template):
""" Функция нормализатора строк """
data = json.loads(str(data))
data['user'].setdefault('first_name', '-')
data['user'].setdefault('last_name', '-')
data['user'].setdefault('username', '-')
data['user'].setdefault('phone_number', '-')
return template.format(id=data['user']['id'],
first_name=data['user']['first_name'],
last_name=data['user']['last_name'],
username=data['user']['username'],
phone_number=data['user']['phone_number'],
status=data['status'])


def wfile(data, template_format, path):
""" Функция записи строк в файл """
with open(path, 'w', encoding='utf8') as file:
file.writelines('Количество пользователей: {0}\n\n'.format(len(data)))
file.writelines([template(user, template_format) for user in data])


def main():
with app:
data = parser(chat)
wfile(data, string_format, './chats/{0}.txt'.format(chat))
print('Сбор данных закончен!')


if __name__ == '__main__':
main()


Все сделал как положено,не работает.Можете помочь?
Вы файл config.ini создали?
И во вторых у вас string_format пустой, задайте туда формат строки.
Еще у меня chunk - это сразу лист, и вызов атрибута chat_members не требуется.
Например string_format = 'ID: {id} \n'
Пример кода, который у меня заработал

Python:
import time
import json
from pyrogram import Client
from pyrogram.errors import FloodWait

app = Client('session', workdir='./session')  # Настройки сессии клиента
chat = 'BinanceRussian'  # Название чата или его ID
string_format = '{id}\n'  # Формат строки для записи

def parser(id):
    """ Функция парсинга пользователей """

    members = []
    offset = 0
    limit = 200
    while True:
        try:
            chunk = app.get_chat_members(id, offset)
            print(chunk)           

        except FloodWait as e:
            time.sleep(e.x)
            continue

        if not chunk:
            break

        members.extend(chunk)
        offset += len(chunk)
    return members

def template(data, template):
    """ Функция нормализатора строк """

    data = json.loads(str(data))
    data['user'].setdefault('first_name', '-')
    data['user'].setdefault('last_name', '-')
    data['user'].setdefault('username', '-')
    data['user'].setdefault('phone_number', '-')
    return template.format(id=data['user']['id'],
                           first_name=data['user']['first_name'],
                           last_name=data['user']['last_name'],
                           username= '@'+data['user']['username'],
                           phone_number=data['user']['phone_number'],
                           status=data['status'])

def wfile(data, template_format, path):
    """ Функция записи строк в файл """

    with open(path, 'w', encoding='utf8') as file:
        #file.writelines('Количество пользователей: {0}\n\n'.format(len(data)))
        file.writelines([template(user, template_format) for user in data])
        
def main():
    with app:
        data = parser(chat)
        wfile(data, string_format, './chats/{0}.txt'.format(chat))
        #text = '''ПРИВЕТ'''
        #Отправка сообщений пользователям, но меня быстро банили, возможно из-за того, что акк свежий   
        '''
        mess=0
        f = open("chats/{0}.txt".format(chat))  # Чтение из файла построчно
        line = f.readline()
        while line:
            try:
                app.send_message(int(line), text)
                mess +=1
                print ('Отправил сообщений: {mess}, последнее для {line}'.format (mess=mess, line=line))
                line = f.readline()
                time.sleep(1)

            except FloodWait as e:
                time.sleep(e.x)
                continue

        f.close()
        '''
        print('Сбор данных закончен!')
        
if __name__ == '__main__':

    main()
 
Последнее редактирование:

djjag

Новичок
Сообщения
1
Реакции
0
0 руб.
Telegram
В инструкции вначале написано:

Устанавливаем зависимости
pip3 install --upgrade pyrogram
pip3 install --upgrade tgcrypto

Как я понял это актуально для Линукса. А у меня Windows.
Скажите реально ли поставить Питон и парсер под винду и как это сделать?
 

vahner

Новичок
Сообщения
2
Реакции
0
0 руб.
Страница Вконтакте
Telegram
В инструкции вначале написано:



Как я понял это актуально для Линукса. А у меня Windows.
Скажите реально ли поставить Питон и парсер под винду и как это сделать?
Нет, это для windows. Установи Python, выбрав галочку PATH, потом открой консоль и введи по очереди вышеуказанные команды, потом создай текстовый файл с расширением .py скопируй туда код, всавив в него свои данные и запусти
 
Сверху Снизу