Tony Wang6 Min. LesezeitTelegram öffentliche Kanäle scrapen 2026 (Python)
Telegram-Kanäle mit Python scrapen: t.me/s + BeautifulSoup, Telethon oder /web/scrape — Limits, Sperrrisiken und rechtliche Grundlagen.
Öffentliche Telegram-Kanäle sind ein Echtzeit-Feed für Krypto-Sentiment, OSINT und Markenbeobachtung. Anders als private Gruppen lässt sich ein öffentlicher Kanal ohne Account über die Web-Vorschau lesen (https://t.me/s/<handle>). 2026 hast du weiterhin drei praktikable Wege: diese Vorschau mit Python parsen, den offiziellen MTProto-Stack mit Telethon ansteuern, oder dieselbe öffentliche URL über eine verwaltete Scrape-API abrufen, sodass du dich nicht selbst um Proxys und Rate-Limits kümmern musst.
Dieser Guide geht alle drei Wege mit lauffähigem Code durch, zeigt, was jeder Weg tatsächlich liefert, und welche rechtlichen Grenzen du nicht überschreiten solltest.
Warum Telegram scrapen?
- Krypto- und Markt-Chatter — Ticker-Erwähnungen und Narrativ-Verschiebungen tauchen in Alpha-Kanälen oft auf, bevor sie auf X oder Reddit sichtbar werden.
- OSINT und News-Monitoring — öffentliche News- und regionale Broadcast-Kanäle pushen Updates nahezu in Echtzeit.
- Marken- und Produkterwähnungen — behalte Leaks, inoffizielles Support-Geplauder und Reputationsrisiken außerhalb der großen Social-Plattformen im Blick.
Ist es legal, Telegram zu scrapen?
Öffentlicher Web-Zugriff auf eine login-freie Vorschau ist rechtlich etwas anderes als das Umgehen einer Authentifizierung oder das Automatisieren einer privaten Mitgliedschaft. Behandle im Zweifel Kanaltext als nutzergenerierten Inhalt, minimiere die Aufbewahrung und hol dir für KI-Trainings-Use-Cases rechtlichen Rat.
Option 1: Die öffentliche Web-Vorschau scrapen (t.me/s/)
Wenn ein Kanal öffentlich ist, öffne https://t.me/s/<handle> im Browser. Kein Login nötig. Stand Mitte 2026 liefert der offizielle Telegram-News-Kanal (t.me/s/telegram) etwa 20 aktuelle Nachrichten pro Seite, jede mit stabilen Widget-Klassen:
| Feld | CSS / Attribut (live geprüft) |
|---|---|
| Nachrichten-Card | div.tgme_widget_message |
| Kanal + ID | data-post (z. B. telegram/429) |
| Nachrichtentext | .tgme_widget_message_text |
| Zeitstempel | time[datetime] (ISO-8601) |
| View-Count | .tgme_widget_message_views (kompakt, z. B. 1.72M) |
import requests
from bs4 import BeautifulSoup
url = "https://t.me/s/telegram"
resp = requests.get(url, headers={"User-Agent": "telegram-research/1.0"}, timeout=20)
resp.raise_for_status()
soup = BeautifulSoup(resp.text, "html.parser")
rows = []
for msg in soup.select("div.tgme_widget_message"):
text_el = msg.select_one(".tgme_widget_message_text")
time_el = msg.select_one("time[datetime]")
views_el = msg.select_one(".tgme_widget_message_views")
rows.append({
"post": msg.get("data-post"),
"text": text_el.get_text(" ", strip=True) if text_el else None,
"date": time_el["datetime"] if time_el else None,
"views": views_el.get_text(strip=True) if views_el else None,
})
print(len(rows), "messages")
print(rows[0])
Warum das für ernsthafte Pipelines nicht ausreicht:
- Flache Historie. Die erste Seite umfasst grob die letzten 20 Posts. Ältere Seiten brauchen Aufrufe im Stil von
?before=<message_id>, die Telegram als progressives AJAX ausliefert, nicht als saubere öffentliche Archiv-API. - Dünne Metadaten. Du verlierst Reply-Ketten, vollständige Medien-Deskriptoren und viele Forward-Quellen, die MTProto offenlegt.
- Markup-Drift. Klassennamen sind seit einer Weile stabil, aber Widget-Redesigns kommen vor — pinne Assertions auf
data-postund überprüfe die Selektoren neu, wenn ein Parse-Lauf leer zurückkommt. - IP-Reputation. Burst-Traffic von einer Rechenzentrums-IP wird trotzdem gedrosselt. Requests dosieren und den Bot im User-Agent ehrlich identifizieren.
Für statische-HTML-Skills (Selektoren, Höflichkeit, CSV-Export) siehe den Python-Web-Scraping-Guide und das BeautifulSoup-Tutorial.
Option 2: Telethon / MTProto (volle Historie, Account-Risiko)
Der klassische Weg führt über das offizielle Client-Protokoll via Telethon (Python). Du registrierst eine Anwendung unter my.telegram.org, authentifizierst dich mit einer Telefonnummer und iterierst über Nachrichten:
from telethon.sync import TelegramClient
api_id = 123456 # int from my.telegram.org
api_hash = "YOUR_API_HASH"
with TelegramClient("session_name", api_id, api_hash) as client:
for message in client.iter_messages("telegram", limit=10):
print(message.id, message.date, (message.text or "")[:80])
Warum Teams davon für reines öffentliches Read-only-Monitoring abrücken:
- Risiko der Telefonsperre. Telegram geht aggressiv gegen VoIP- und virtuelle Nummern vor (Twilio, Google Voice, viele „SMS-Farmen"). Accounts sterben oft kurz nach dem ersten automatisierten Aufruf. Die eigene persönliche Nummer für einen Scraper zu nutzen, ist ein schlechter Tausch.
- FloodWaitError. Tiefe historische Pagination läuft bewusst langsam. Rechne mit Wartezeiten von mehreren Sekunden bis mehreren Stunden, wenn du Jahre eines vielbesuchten Kanals abrufst.
- Session-Betrieb. Du besitzt jetzt Session-Dateien, 2FA, Geräteliste und Reconnect-Logik — für einen Produkt-Client in Ordnung, für einen Einweg-Feed schwer.
- API-Bedingungen. Client-Entwickler müssen die API-Nutzungsbedingungen einhalten, einschließlich des KI-Nutzungsverbots, das an die Content-Lizenzbedingungen gekoppelt ist.
Nutze Telethon, wenn du legitim authentifizierten Zugriff brauchst (private Kanäle, denen du angehörst, volle Historie, Medien-Download in Protokollqualität). Nutze es nicht als Wegwerf-Identitätsschicht für einen Scraper.
Option 3: Verwalteter Abruf mit /web/scrape
Es gibt heute keinen dedizierten „Telegram-Kanal-JSON"-Produktendpoint in Crawloras Katalog. Was du kannst: t.me/s/<handle> als normale öffentliche URL behandeln — POST /api/v1/web/scrape auf der Web-Scraping-API, raw_html (oder html) anfordern und dieselben BeautifulSoup-Extraktoren aus Option 1 laufen lassen. Die API übernimmt Chrome-impersonierte HTTP-Requests, Browser-Eskalation bei Bedarf (render: "auto") und Egress, sodass du keine residentiellen Proxys selbst rotieren musst.
curl -X POST "https://api.crawlora.net/api/v1/web/scrape" \
-H "x-api-key: $CRAWLORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://t.me/s/telegram",
"formats": ["raw_html", "metadata"],
"render": "auto",
"only_main_content": false
}'
import requests
from bs4 import BeautifulSoup
resp = requests.post(
"https://api.crawlora.net/api/v1/web/scrape",
headers={"x-api-key": "YOUR_API_KEY"},
json={
"url": "https://t.me/s/telegram",
"formats": ["raw_html", "metadata"],
"render": "auto",
"only_main_content": False, # keep message widgets intact
},
timeout=60,
)
resp.raise_for_status()
payload = resp.json()["data"]
html = payload["raw_html"]
print("status", payload["metadata"]["status_code"], "method", payload["scrape"]["method"])
soup = BeautifulSoup(html, "html.parser")
for msg in soup.select("div.tgme_widget_message")[:5]:
text = msg.select_one(".tgme_widget_message_text")
print(msg.get("data-post"), text.get_text(" ", strip=True)[:100] if text else None)
Setze only_main_content für Telegrams Widget-Layout auf false — das Standard-true entfernt Chrome-Elemente, die die Nachrichtenstruktur enthalten können, die du brauchst. Der Free-Tier bietet 2.000 Credits/Monat, keine Kreditkarte nötig; /web/scrape wird pro erfolgreichem Request abgerechnet (siehe Pricing).
Für einen Smoke-Test ohne Anmeldung: füge eine beliebige t.me/s/...-URL in den Free Web Scraper ein und prüfe das zurückgegebene HTML/Markdown, bevor du einen API-Key verdrahtest.
Welche Option solltest du wählen?
| Ziel | Bester Weg |
|---|---|
| Einmaliger Blick auf aktuelle öffentliche Posts | Option 1 (requests + BeautifulSoup auf t.me/s/) |
| Volle Historie, private Kanäle, denen du angehörst, Medien in Protokollqualität | Option 2 (Telethon mit einem echten, selbst kontrollierten Account) |
| Geplantes öffentliches Monitoring ohne Proxy-Betrieb | Option 3 (/web/scrape + dieselben Parser) |
| KI-Trainingskorpus aus Telegram | Keine — durch Telegrams Content-Lizenzbedingungen blockiert |
Was du sammeln kannst
Aus der öffentlichen Web-Vorschau (Optionen 1 und 3):
- Kanal-Handle + Nachrichten-ID (
data-post) - Nachrichtentext (sofern vorhanden; manche Cards sind reine Medien)
- ISO-Zeitstempel aus
time[datetime] - Kompakte View-Counts (z. B.
1.72M) - Kanal-Zähler auf der Seite (Abonnenten, Fotos, Videos, Links)
Aus Telethon / MTProto (Option 2) zusätzlich:
- Tiefe Historie über das ~20-Nachrichten-Web-Fenster hinaus
- Strukturierte Medien-Referenzen, Replies und Forwards (soweit das Protokoll sie offenlegt)
- Private Kanäle und Gruppen — nur wenn der authentifizierte Account Mitglied ist
Sammle keine privaten Nutzerprofile, Telefonnummern oder Inhalte aus Chats, für die du keine Einladung besitzt.
Einschränkungen und häufige Herausforderungen
- Private und Invite-only-Kanäle sind nicht über das öffentliche Web scrapbar. Mitgliedschaft + MTProto ist der einzig ehrliche Weg.
- Historientiefe auf
t.me/s/ist bewusst flach; plane mit Telethon oder akzeptiere „nur aktuelle Posts". - Medien-Bandbreite — große Videos laufen über generische Proxys in Timeouts; lade gezielt herunter und cache.
- Rate-Limits — Telethon liefert
FloodWaitError; die Web-Vorschau reagiert bei Burst-Last mit weichen Blockaden. Drossle, statt zu hämmern. - KI-Nutzung — Telegram verbietet die Nutzung von gescrapten oder per API bezogenen Plattformdaten zum Trainieren oder Feintunen von Modellen. Baue Pipelines entsprechend.
Quellen
Wo das hineinpasst
Probier es zuerst kostenlos aus: füge eine t.me/s/<handle>-URL in den Free Web Scraper ein, oder prüfe Bot-Friktion mit dem Anti-Bot-Checker — ohne Anmeldung.
Telegram ist eine Social-Quelle unter vielen. Für Community-Threads siehe wie man Reddit scrapt; für Breaking-News-Posts siehe wie man Twitter / X scrapt; für den rechtlichen Rahmen siehe Ist Web Scraping 2026 legal?. Wenn Ziele mit WAFs zurückschlagen, lies Sites scrapen, die Bots blockieren.
Teste eine beliebige öffentliche URL im Free Web Scraper, erkunde die Produktoberfläche auf der Web-Scraping-API-Seite, und sieh dir die Credit-Kosten auf der Pricing-Seite an.
Öffentliche Seiten abrufen, ohne eine eigene Proxy-Farm zu betreiben
POST /web/scrape liefert rohes HTML oder Markdown für jede öffentliche URL. Zahlung nur bei Erfolg, 2.000 kostenlose Credits/Monat, keine Kreditkarte nötig.
Teil unserer How-to-Scrape-Guide-Serie — jede von uns abgedeckte Plattform, an einem Ort.
Häufig gestellte Fragen
Kann ich Telegram ohne Account scrapen?
Ja, für öffentliche Kanäle: öffne https://t.me/s/<handle> — kein Login nötig. Du bekommst grob die letzten 20 Posts mit Text, Zeitstempeln und View-Counts. Private Gruppen, DMs und Invite-only-Kanäle brauchen weiterhin einen authentifizierten MTProto-Client, der Mitglied ist.
Was ist der beste Weg, Telegram in Python zu scrapen?
Für aktuelle öffentliche Posts: requests + BeautifulSoup auf t.me/s/, oder dasselbe HTML per POST /web/scrape, wenn du verwaltete Proxys willst. Für volle Historie: Telethon mit einer echten Telefonnummer. Einen dedizierten Telegram-JSON-Produktendpoint gibt es in Crawloras Katalog heute nicht.
Ist es legal, Telegram-Kanäle zu scrapen?
Öffentlicher Web-Zugriff auf eine login-freie Vorschau wird oft anders behandelt als das Umgehen einer Authentifizierung, aber Telegrams Content-Lizenzbedingungen verbieten das Scrapen von Plattformdaten zum Trainieren oder Feintunen von KI-Modellen, und die API-Bedingungen verweisen auf dasselbe Verbot. Sammle nur öffentliche Inhalte, verzichte auf PII und prüfe Telegrams Bedingungen sowie dein lokales Recht. Das ist keine Rechtsberatung.
Warum sperrt Telethon meine Nummer?
Telegram markiert VoIP- und virtuelle Nummern (Twilio, Google Voice, SMS-Farmen) aggressiv. Automatisierte MTProto-Clients, die sich mit solchen Nummern registrieren, sterben oft kurz nach den ersten Aufrufen. Nutze eine echte, selbst kontrollierte Nummer, oder bleib für reines Read-only-Monitoring bei der öffentlichen Web-Vorschau.
Wie bekomme ich mehr als die letzten 20 Telegram-Posts?
Die t.me/s/-Vorschau ist bewusst flach (~20 Nachrichten). Tiefere Historie braucht Telethon (oder einen anderen MTProto-Client) mit authentifizierter Pagination, und du musst FloodWaitError handhaben, wenn Telegram historische Abrufe drosselt.
Hat Crawlora eine Telegram-API?
Keinen kanalspezifischen, normalisierten Endpoint. Nutze POST /api/v1/web/scrape auf einer öffentlichen t.me/s/-URL mit Formaten wie raw_html und parse dann mit BeautifulSoup genauso, wie du es bei einem direkten Request tun würdest — die API übernimmt Render-Eskalation und Egress.