Парсер чатов telegram python

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

mmat16/telegram_channel_parser

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Для того чтобы пользоваться данным парсером вам необходимо установить Python3 и несколько сторонних библиотек с помощью данной команды:

На Windows: pip install -r requirements.txt

На Mac OS и Linux: pip3 install -r requirements.txt

Так же вам понадобится зарегистрировать собственное приложение Telegram. Для этого надо зайти на сайт https://my.telegram.org/apps, зайти в свою учётную запись Telegram и создать приложение (Create new application). Следует указать:

  • App title — название приложения (неважно какое)
  • Short name — сокращённое название (только буквы и цифры, 5-32 символа)
  • Platform — указать Other
Читайте также:  How to run main in java

Остальные поля можно оставить пустыми. Нажать кнопку Create application. В этот момент зачастую Telegram не пускает вас дальше по непонятным причинам, но главное не сдаваться. Иногда помогает прокликивание без изменения данных, иногда надо поменять App title или Short name. После того как ваше приложение будет зарегистрировано откроется следующая страница на которой будут указаны регистрационные данные вашего приложения. Стоит сохранить все данные в надёжном месте, но для работы парсера вам понадобятся графы App api_id и App api_hash. Их надо вставить в одноимённые переменные в файле config.py.

После установки библиотек и регистрации приложения, парсером можно пользоваться. Для этого:

  • зайдите в директорию с исходным кодом и вызовите парсер командой «python3 parser.py»
  • при первом запуске будет необходимо подтвердить вход через Telegram (двухфакторную аутентификацию лучше отключить на это время):
    • в консоли появится сообщение, после которого надо ввести номер телефона, привязанный к Telegram
    • после следующего сообщения ввести код подтверждения Telegram

    После получения ссылки сразу же начнётся сбор сообщений.
    В директории со скриптом появится папка с айди канала и журнал с расширением .log куда будут заносится отметки о работе скрипта. Внутри папки канала начнут появляться папки с названиями, соответствующими айди сообщения, а в них будет находится текстовый файл с текстом сообщения и зашитыми в него гиперссылками, а так же текстовый файл с «метаданными» — ссылкой на сообщение и датой и временем его отправки. Так же если к сообщению были приложены какие-либо медиа — они будут загружены в ту же папку.

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

    Источник

    Парсим данные в Telegram на Python. Часть 2. Читаем и анализируем сообщения из чатов

    Пишем парсер для Telegram: собираем сообщения из каналов и чатов.

    Иллюстрация: Катя Павловская для Skillbox Media

    Антон Яценко

    Сегодня мы научимся парсить чаты из Telegram: разберёмся в том, какие модули нам пригодятся, и настроим сбор сообщений. Всё это с помощью библиотеки Telethon для Python.

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

    Что у нас сейчас есть?

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

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

    Добавляем новые импорты

    Откроем в IDE код из первой части урока. Мы продолжим работать с ним, а не будем писать всё с нуля. Чтобы спарсить сообщения из чатов, необходимо импортировать новый метод и функцию в начало кода:

    Всё получилось. Откроем нашу директорию. Теперь в ней два файла в формате CSV: members.csv и chats.csv. Откроем последний:

    Мы видим, что сохранились не только сами сообщения, но и техническая информация про их id, id запроса и так далее. Такой результат нам не подходит. Вернёмся к циклу while и добавим к методу message параметр message. Он позволяет сохранять только само сообщение.

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

    Код парсера для Telegram на Python полностью

    В двух частях урока по парсингу информации из Telegram мы написали много кода. Посмотрим на него полностью:

    from xmlrpc.client import DateTime from telethon.sync import TelegramClient from telethon.tl.functions.messages import GetDialogsRequest from telethon.tl.types import InputPeerEmpty from telethon.tl.functions.messages import GetHistoryRequest from telethon.tl.types import PeerChannel import csv api_id = 18377495 api_hash = "a0c785ad0fd3e92e7c131f0a70987987" phone = "+79991669331" client = TelegramClient(phone, api_id, api_hash) client.start() chats = [] last_date = None chunk_size = 200 groups=[] result = client(GetDialogsRequest( offset_date=last_date, offset_id=0, offset_peer=InputPeerEmpty(), limit=chunk_size, hash = 0 )) chats.extend(result.chats) for chat in chats: try: if chat.megagroup== True: groups.append(chat) except: continue print("Выберите группу для парсинга сообщений и членов группы:") i=0 for g in groups: print(str(i) + "- " + g.title) i+=1 g_index = input("Введите нужную цифру: ") target_group=groups[int(g_index)] print("Узнаём пользователей. ") all_participants = [] all_participants = client.get_participants(target_group) print("Сохраняем данные в файл. ") with open("members.csv", "w", encoding="UTF-8") as f: writer = csv.writer(f,delimiter=",",lineterminator="\n") writer.writerow(["username", "name","group"]) for user in all_participants: if user.username: username= user.username else: username= "" if user.first_name: first_name= user.first_name else: first_name= "" if user.last_name: last_name= user.last_name else: last_name= "" name= (first_name + ' ' + last_name).strip() writer.writerow([username,name,target_group.title]) print("Парсинг участников группы успешно выполнен.") offset_id = 0 limit = 100 all_messages = [] total_messages = 0 total_count_limit = 0 while True: history = client(GetHistoryRequest( peer=target_group, offset_id=offset_id, offset_date=None, add_offset=0, limit=limit, max_id=0, min_id=0, hash=0 )) if not history.messages: break messages = history.messages for message in messages: all_messages.append(message.message) offset_id = messages[len(messages) - 1].id if total_count_limit != 0 and total_messages >= total_count_limit: break print("Сохраняем данные в файл. ") with open("chats.csv", "w", encoding="UTF-8") as f: writer = csv.writer(f, delimiter=",", lineterminator="\n") for message in all_messages: writer.writerow([message]) print('Парсинг сообщений группы успешно выполнен.')

    Что дальше?

    Библиотека Telethon используется не только для парсинга информации о пользователях и сообщений в каналах и чатах, но и для автоматизации работы с Telegram. Например, администраторы каналов могут создать бота, позволяющего писать сообщения, отправлять стикеры и управлять списком участников. Эти примеры разобраны в документации библиотеки.

    Читайте также:

    Источник

Оцените статью