Загрузка...

Telegram Parser Chats | A tool to automate chat searches

Thread in Python created by Maehdakvan Oct 25, 2024. (bumped Jul 6, 2025) 1758 views

  1. Maehdakvan
    Maehdakvan Topic starter Oct 25, 2024 76 Nov 14, 2020
    Привет, разработчики!

    Рад представить вам мой новый Telegram Парсер Чатов! Этот инструмент позволяет эффективно искать и анализировать чаты по заданным тегам и окончаниям.

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

    Особенности парсера:
    • Асинхронный поиск чатов с использованием Telethon API
    • Фильтрация по тегам и окончаниям с комбинированным поиском
    • Продвинутое логирование действий и ошибок с ротацией *****
    • Сохранение уникальных тегов чатов в удобном формате ссылки на телеграм
    • Фильтрация по минимальному количеству подписчиков
    • Проверка доступности комментариев в группах
    • Определение языка контента с настраиваемым порогом (CIS/INT)
    • Поддержка различных типов чатов (супергруппы, группы)
    • Настраиваемые параметры поиска (количество проверяемых постов, порог языковой детекции)
    • Обработка ошибок и пропуск проблемных чатов без прерывания работы
    • Прогресс выполнения с отображением текущего/общего количества запросов

    Установка и настройка:

    Требования:
    • Python 3.8+
    • Библиотеки: asyncio, telethon, loguru
    • Telegram API credentials (api_id и api_hash)

    Необходимые зависимости:

    Code

    python -m pip install pip asyncio telethon loguru --upgrade
    Настройка конфигурации:

    Создайте файл `config.py` и добавьте ваши данные:
    Python

    # Тут уже указано официальное приложение Telegram Desktop, если шаришь могёшь поменять
    api_id = 611335
    api_hash = 'd524b414d21f4d37f08684c1df41ac9c'

    session_file = 'session.session' # Путь к файлу сессии

    tags_file = 'tags.txt' # Путь к файлу с тегами
    endings_file = 'ends.txt' # Путь к файлу окончаний
    results_file = 'results.txt' # Путь к файлу результатов

    min_subscribers = 1000 # Фильтр по минимальным подписчикам
    posts_to_check = 5 # Количество постов для открытости комментариев
    require_comments_enabled = True # Проверять ли открытость комментариев

    lang = 'CIS' # Детектить по русскому языку CIS или INT чтоб другие языки
    lang_detection_ratio = 0.8 # сейчас 80% (степень уверенности в языке, если 80% русский то значит русский)

    Использование парсера:

    Code

    python parser.py
    Код парсера:
    Python

    import asyncio
    from telethon import TelegramClient
    from telethon.tl.functions.contacts import SearchRequest
    from telethon.tl.functions.channels import GetFullChannelRequest
    from loguru import logger
    import os
    import re

    from config import (
    api_id,
    api_hash,
    session_file,
    tags_file,
    endings_file,
    results_file,
    min_subscribers,
    posts_to_check,
    require_comments_enabled,
    lang,
    lang_detection_ratio
    )

    logger.add("parser.log", rotation="1 MB")
    logger.info("Начало работы парсера.")

    client = TelegramClient(session_file, api_id, api_hash)

    async def read_lines(file_path):
    if not os.path.exists(file_path):
    logger.error(f"Файл {file_path} не найден.")
    return []
    with open(file_path, 'r', encoding='utf-8') as f:
    lines = [line.strip() for line in f if line.strip()]
    logger.info(f"Прочитано {len(lines)} строк из {file_path}.")
    return lines

    async def check_comments_enabled(channel_entity):
    try:
    posts = await client.get_messages(channel_entity, limit=posts_to_check)

    if not posts:
    return False

    comment_enabled_count = 0
    for post in posts:
    if not hasattr(post, 'replies') or post.replies is None:
    continue

    if post.replies.comments:
    comment_enabled_count += 1

    return comment_enabled_count >= len(posts) / 2
    except Exception as e:
    logger.error(f"Ошибка при проверке комментариев: {e}")
    return False

    async def detect_language(channel_entity):
    try:
    posts = await client.get_messages(channel_entity, limit=10)

    if not posts:
    return None

    russian_pattern = re.compile('[а-яА-ЯёЁ]')

    total_chars = 0
    russian_chars = 0

    for post in posts:
    if not post.message:
    continue

    message_text = post.message
    total_chars += len(message_text)

    matches = russian_pattern.findall(message_text)
    russian_chars += len(matches)

    if total_chars == 0:
    return None

    russian_ratio = russian_chars / total_chars

    if russian_ratio >= lang_detection_ratio:
    return 'CIS'
    else:
    return 'INT'

    except Exception as e:
    logger.error(f"Ошибка при определении языка: {e}")
    return None

    async def main():
    await client.start()
    logger.info("Клиент Telegram успешно запущен.")

    tags = await read_lines(tags_file)
    endings = await read_lines(endings_file)

    if not tags or not endings:
    logger.error("Не удалось прочитать теги или окончания. Завершение работы.")
    return

    chat_ids = set()
    detected_lang = lang

    total_queries = len(tags) * len(endings)
    current_query = 0

    for tag in tags:
    for end in endings:
    current_query += 1
    search_query = f"{tag}{end}"
    logger.info(f"Поиск {current_query}/{total_queries}: '{search_query}'")
    try:
    result = await client(SearchRequest(
    q=search_query,
    limit=100
    ))

    if not result.chats:
    logger.warning(f"По запросу '{search_query}' чатов не найдено.")
    continue

    for chat in result.chats:
    try:
    if hasattr(chat, 'broadcast') and chat.broadcast:
    continue
    elif (hasattr(chat, 'megagroup') and chat.megagroup) or hasattr(chat, 'title'):
    if not chat.username:
    continue

    full_chat = await client(GetFullChannelRequest(channel=chat))
    participants_count = full_chat.full_chat.participants_count

    if participants_count < min_subscribers:
    logger.info(f"Пропущен '{chat.title}': мало подписчиков ({participants_count} < {min_subscribers})")
    continue

    if require_comments_enabled:
    comments_enabled = await check_comments_enabled(chat)
    if not comments_enabled:
    logger.info(f"Пропущен '{chat.title}': комментарии отключены")
    continue

    channel_lang = await detect_language(chat)
    if channel_lang:
    detected_lang = channel_lang

    if lang != detected_lang:
    logger.info(f"Пропущен '{chat.title}': несоответствующий язык (обнаружен {detected_lang}, требуется {lang})")
    continue

    chat_ids.add(chat.username)
    logger.info(f"Найдена группа: {chat.title} (Username: {chat.username}, Подписчиков: {participants_count}, Язык: {detected_lang})")
    else:
    logger.warning(f"Неизвестный тип чата: {chat}")
    except Exception as e:
    logger.error(f"Ошибка при обработке чата '{getattr(chat, 'title', 'Неизвестно')}': {e}")
    continue

    except Exception as e:
    logger.error(f"Ошибка при поиске '{search_query}': {e}")

    if chat_ids:
    with open(results_file, 'w', encoding='utf-8') as f:
    for chat_id in chat_ids:
    f.write(f"t.me/{chat_id}\n")
    logger.info(f"Сохранено {len(chat_ids)} уникальных каналов/групп в {results_file}.")
    else:
    logger.warning("Не найдено ни одного подходящего чата.")

    await client.disconnect()
    logger.info("Клиент Telegram отключен. Работа завершена.")

    if __name__ == "__main__":
    asyncio.run(main())

    Создание тегов и окончаний:

    Создайте файлы `tags.txt` и `ends.txt`, добавляя по одному тегу или окончанию на строку. Пример:

    tags.txt
    Code

    tech
    news
    gaming
    ends.txt
    Code

    group
    chat
    community
    Результаты поиска:

    Результаты будут сохранены в файл `results.txt` в формате ссылки. Этот файл можно использовать для дальнейшего анализа или управления чатами.


    Пример ***** парсера:
    Code

    2024-04-27 12:00:00 Начало работы парсера.
    2024-04-27 12:00:05 Клиент Telegram успешно запущен.
    2024-04-27 12:00:10 Прочитано 3 строк из tags.txt.
    2024-04-27 12:00:10 Прочитано 3 строк из ends.txt.
    2024-04-27 12:00:15 Поиск 1/9: 'techgroup'
    2024-04-27 12:00:20 Найдена группа: Tech Group (Username: techgroup)
    ...
    2024-04-27 12:05:00 Сохранено 10 уникальных тегов чатов в results.txt.
    2024-04-27 12:05:05 Клиент Telegram отключен. Работа завершена.

    Разработка на заказ:

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

     
  2. llimonix
    llimonix Oct 25, 2024 :peace: make testers great again! 23,809 Jan 20, 2020
    Сам делал или где то взял ?
     
    1. Maehdakvan Topic starter
      llimonix, сделал сам, как референс опирался на парсер в боте серая схема
  3. qpEHIKC
    qpEHIKC Oct 29, 2024 0 Oct 6, 2024
    Привет, а файл requirements.txt откуда берем?
     
    1. Maehdakvan Topic starter
      qpEHIKC,

      Code
      python -m pip install pip asyncio telethon loguru --upgrade
    2. qpEHIKC
  4. qpEHIKC
    qpEHIKC Nov 1, 2024 0 Oct 6, 2024
    Спасибо, все работает, ты крут!
     
  5. kirill166
    kirill166 Nov 29, 2024 Shut up and take my money. 153 Mar 4, 2018
    красавец, таких бы побольше
     
  6. oreo3322
    oreo3322 Jan 26, 2025 4 Mar 23, 2022
    +Rep
    А акк не снесут тг? Который использовался для получения апи и хэша
     
  7. asyncTraffic
    asyncTraffic Mar 2, 2025 :BrainCosmic: Комьюнити: https://t.me/+q8QT8dzyDwdiZTky 376 Dec 30, 2024
    классно, молодец, возьму себе на вооружение, спиздию так сказать кусок кода)
     
  8. zxcFlezyi
    zxcFlezyi Mar 5, 2025 64 Oct 26, 2024
    бессполезно.
     
    1. View previous comments (2)
    2. zxcFlezyi
      asyncTraffic, к тому же код спащенный + есть нотки гптшки
    3. K1p1k
      zxcFlezyi, Хз для людей которые сидят в p2p чатах полезно
    4. asyncTraffic
      zxcFlezyi, если использовать его прямо по назначению будет польза - парсинг чатов для того что бы позже спарсить от туда аудиторию и заинвайтить, или это уже хуйня не актуально, никто так не делает?)
  9. K1p1k
    K1p1k Mar 5, 2025 23 Jul 1, 2022
  10. Kostya3w4
    Kostya3w4 May 7, 2025 0 Feb 16, 2025
    скрипт работает, но 100 процентов через 10-20 секунд аккаунт выбьет и все
     
Loading...
Top