Парсер чатов для телеграма
Для парсинга нам понадобится 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://telete.in/
Формат строки - это настройки строки с полученными данными. В скрипт заложены следующие шаблоны.
{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. Можно настроить и прокси, если нужно могу сказать как и где указывать.
При первом запуске у вас спросит ваш номер телефона от аккаунта, через который вы будете работать и код, полученный по СМС или в чат уже запущеного клиента.