Як збирати дані з Telegram-каналів за допомогою Python?

Коментарі: 0

Скрапінг Telegram-каналів – це ефективний спосіб автоматично отримувати інформацію з публічних і приватних спільнот. Використовуючи Python та бібліотеку Telethon, можна отримувати повідомлення, метадані, медіафайли та навіть список учасників групи.

Скрапінг Telegram може використовуватися для маркетингових досліджень, аналізу контенту та моніторингу дискусій у спільнотах. Далі розглянемо покрокові інструкцію, як реалізувати скрапінг Telegram за допомогою Python.

Крок 1: Встановлення необхідних бібліотек

Щоб розпочати скрапінг Telegram-каналів, потрібно підготувати середовище Python та встановити необхідні бібліотеки. Головним інструментом для скрапінгу Telegram API є Telethon – асинхронна бібліотека, яка дозволяє взаємодіяти з платформою.

Встановіть її за допомогою команди:


pip install telethon

Крок 2: Налаштування бібліотеки Telethon

Перш ніж працювати з API Telegram, вам потрібно отримати власний ідентифікатор API та Hash.

  1. Увійдіть у свій обліковий запис Telegram за допомогою номера телефону облікового запису розробника, який потрібно використовувати.

    1.png

  2. Натисніть на розділ інструментів розробки API.

    2.png

  3. З’явиться вікно створення нової програми . Заповніть дані вашої заявки. Обовʼязкові є лише два перших поля, які можна за бажанням змінити, інші необовʼязкові.

    3.png

  4. У кінці натисніть «Створити програму» . Пам’ятайте, що ваш хеш API є секретним, і Telegram не дозволить вам його анулювати. Ніде не публікуйте ці дані.

    4.png

Після отримання API та Hash можемо створити сесію для входу в обліковий запис.

Важливо! Не називайте свій файл telethon.py. Оскільки Python спробує імпортувати TelegramClient і це завершиться помилкою.

Напишемо код для входу в свій обліковий запис:


from telethon import TelegramClient

api_id = 12345678
api_hash = '0123456789abcdef0123456789abcdef'

with TelegramClient('anon', api_id, api_hash) as client:
   client.loop.run_until_complete(client.send_message('me', 'hello'))

У першому рядку ми імпортуємо назву класу, щоб створити екземпляр класу. Потім ми визначаємо змінні для зберігання нашого API та hash.

Пізніше створюємо новий екземпляр TelegramClient і називаємо його client. Тепер можна використовувати змінну client для чого завгодно, наприклад надсилання собі повідомлення.

Крок 3: Вибір каналу або групи в Telegram

Перед тим, як почати скрапінг Telegram-каналів, потрібно визначити, звідки саме будуть збиратися дані. Telegram має два основних типи спільнот: канали та групи.

Якщо потрібно отримати доступ до прихованого каналу або групи, необхідно бути їхнім учасником. Деякі спільноти мають обмеження або потребують запрошення, що варто враховувати перед запуском скрапера Telegram-каналів.

Розглянемо приклад, як вибрати канал або групу, щоб приєднатися та зібрати дані:


from telethon import TelegramClient

api_id = 12345678
api_hash = '0123456789abcdef0123456789abcdef'
client = TelegramClient('anon', api_id, api_hash)


async def main():
   me = await client.get_me()
   username = me.username
   print(username)
   print(me.phone)
   
   async for dialog in client.iter_dialogs():
       print(dialog.name, 'має ID - ', dialog.id)


with client:
   client.loop.run_until_complete(main())

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

Крок 4: Збір повідомлень

Після налаштування підключення до Telegram API можна переходити до збору повідомлень з обраного каналу або групи. Скрапінг Telegram за допомогою Python дозволяє отримувати текстові повідомлення, медіафайли, часові мітки та метадані про учасників.

Розглянемо приклад, як зібрати різні типи контенту:


from telethon import TelegramClient

api_id = 12345678
api_hash = '0123456789abcdef0123456789abcdef'
client = TelegramClient('anon', api_id, api_hash)


async def main():
   id_client = 32987309847

   object = await client.get_entity(id_client)

   print(object.title)
   print(object.date)

   if object.photo:  # Перевіряємо чи є фото профілю
       await client.download_profile_photo(object, file="profile.jpg")

   # Друкуємо всі повідомлення чату
   async for message in client.iter_messages(id_client):
       print(f'{message.id}//{message.date} // {message.text}')

       # Зберігаємо всі фотографії чату
       if message.photo:
           path = await message.download_media()
           print('Файл збережено', path)


with client:
   client.loop.run_until_complete(main())

Отримавши необхідний ID, ми отримуємо доступ до повідомлень і метаданих групи. Далі можна зчитати такі дані, як назва групи, дата її створення, аватар (якщо є), а також повідомлення разом із їхніми ID та датою публікації. Якщо в повідомленнях містяться зображення, їх можна автоматично завантажити для подальшої обробки.

Крок 5: Запуск скрипта для збору даних

Після налаштування всіх параметрів можна запускати скрапер. Перед повноцінним збором даних рекомендується протестувати скрипт на невеликому обсязі повідомлень, щоб переконатися, що всі дані отримуються коректно.

При запуску варто звернути увагу на такі моменти:

  • Чи отримуються всі необхідні повідомлення та метадані.
  • Чи правильно зберігаються текст, дати, ID повідомлень і медіафайли.
  • Чи немає помилок під час виконання запитів до Telegram API.

Якщо виникають помилки, їх можна вирішувати шляхом налаштування затримок між запитами або перевірки доступності каналу або групи.

Крок 6: Додаткові можливості збору даних

Після того як налаштували базовий збір даних, можна розширити функціонал скрапера і додати можливості для збору інформації.

  1. Отримання інформації про учасників каналу або групи, зокрема їхніх імен, ID та статусів. Це дозволить здійснювати аналіз активності користувачів чи моніторинг ключових осіб.
  2. Фільтрація повідомлень за ключовими словами та датами. Іноді корисно обмежити збір даних лише тими повідомленнями, що містять певні ключові слова або були написані в певний період часу. Це дозволяє збирати більш цільову інформацію, що відповідає певним критеріям.
  3. Збір додаткових метаданих. Окрім основних даних, таких як текст повідомлень та медіафайли, можна збирати й інші метадані, такі як кількість реакцій на повідомлення, кількість пересланих повідомлень чи наявність опитувань.

from telethon import TelegramClient

api_id = 12345678
api_hash = '0123456789abcdef0123456789abcdef'

client = TelegramClient('session_name', api_id, api_hash)


async def main():
   channel = await client.get_entity(-4552839301)

   # Отримуємо 100 останніх повідомлень з каналу
   messages = await client.get_messages(channel, limit=100)

   # Фільтрація повідомлень за ключовими словами
   keyword = 'Привіт'
   filtered_messages = [msg for msg in messages if keyword.lower() in msg.text.lower()]

   for message in filtered_messages:
       print(f"Повідомлення: {message.text}")
       print(f"Дата: {message.date}")
       print(f"Відправник: {message.sender_id}")

   # Отримуємо учасників каналу
   participants = await client.get_participants(channel)
   for participant in participants:
       print(f"Учасник ID: {participant.id}, Імʼя користувача: {participant.username}")


with client:
   client.loop.run_until_complete(main())

Крок 7: Управління обмеженнями API

При роботі з Telegram API варто враховувати, що існують обмеження на кількість запитів, які можна виконувати за певний час. Якщо робити забагато запитів, Telegram може тимчасово заблокувати доступ до API або уповільнити відповідь сервера.

Щоб уникнути цієї проблеми рекомендовано використовувати проксі:


import random
import socks
from telethon import TelegramClient

# Список доступних проксі
proxy_list = [
   ("res.proxy-seller.com", 10000, socks.SOCKS5, True, "user1", "pass1"),
   ("res.proxy-seller.com", 10001, socks.SOCKS5, True, "user2", "pass2"),
   ("res.proxy-seller.com", 10002, socks.SOCKS5, True, "user3", "pass3"),
]

# Вибираємо випадковий проксі
proxy = random.choice(proxy_list)

try:
   client = TelegramClient('anon', api_id, api_hash, proxy=proxy)
   print(f"Успішне підключення через проксі: {proxy}")
except (OSError, ConnectionError, TimeoutError, ValueError) as e:
   print(f"Помилка проксі: {e}, пробуємо без нього")
   client = TelegramClient('anon', api_id, api_hash)

Ми налаштували підключення через проксі та реалізували їхню ротацію, щоб при кожному новому з’єднанні використовувався інший проксі-сервер. Це допомагає уникнути блокування Telegram API та зменшує ризик обмеження швидкості з’єднання, забезпечуючи стабільну роботу скрипта.

Навіщо збирати дані з Telegram?

Збір даних з Telegram за допомогою Python може бути корисним у багатьох сферах, оскільки ця платформа є джерелом великої кількості унікальної інформації.

Основні напрямки використання:

  • Маркетингові дослідження: аналіз трендів, інтересів аудиторії та конкурентів.
  • Моніторинг контенту: збір та аналіз повідомлень з груп та каналів.
  • Аналітика користувачів: дослідження поведінки учасників спільноти.
  • Автоматизація: збір та обробка повідомлень для подальшого використання в чат-ботах та системах оповіщень.

Використовуючи Telegram скрапер, можна автоматично отримувати потрібні дані та спрощувати їх подальший аналіз.

Висновки

У цій статті ми навчились, як за допомогою Python здійснити скрапінг Telegram та ефективно отримувати дані з обраних спільнот. Покроково налаштували бібліотеку Telethon, підключили API, вибрали потрібні канали чи групу, а також отримали повідомлення, медіафайли та метадані. Приділили увагу використанню проксі для забезпечення неперервної роботи.

Завдяки використанню скрапера Telegram на Python можна автоматизувати збір даних для маркетингових досліджень, аналізу контенту чи моніторингу активності користувачів. Щоб уникнути обмежень Telegram, окрім проксі, можна застосовувати ротацію облікових записів, використання VPN або динамічні таймаути між запитами. Важливо також дотримуватися законності та етики збору даних, щоб уникнути порушень правил платформи.

Коментарії:

0 Коментаріїв