Telegram::GroupScraper - Scraper publicznych kanałów i grup Telegram

Przegląd scrapera
Scraper zbiera wszystkie posty i wiadomości z publicznych kanałów i grup Telegram.
Logika działania różni się od pozostałych scraperów: on automatycznie iteruje po wiadomościach w kanale lub grupie. Z tego powodu nie można używać go razem z innymi scraperami w jednym zadaniu.
Kolejność wierszy w wyniku nie jest gwarantowana według numeru posta (zależy od wątków). Metadane czatu/kanału są ładowane raz na kanał i duplikowane w każdym wierszu posta.
Zapisywanie wyników jest możliwe w dowolnej formie i strukturze, której potrzebujesz, dzięki wbudowanemu potężnemu silnikowi szablonów Template Toolkit, który pozwala na stosowanie dodatkowej logiki do wyników i wyprowadzanie danych w różnych formatach, w tym JSON, SQL i CSV.
Przypadki użycia scrapera
🔗 Scrapowanie użytkowników
Scrapowanie użytkowników publicznych grup w Telegram
🔗 Scrapowanie wszystkich wiadomości
Scrapowanie wszystkich wiadomości z publicznych grup w Telegram
Zbierane dane
Działa z publicznymi kanałami i grupami.
Wiadomość
- Link do posta (
url) - ID posta (
post_id) - Nazwa użytkownika kanału/grupy bez
@(channel) - Tekst posta z HTML (
message_text) - Ten sam tekst bez HTML (
message_text_plain) — dla filtrów, wyszukiwania i wyjścia - Data w formacie ISO (
message_date) - Wyświetlenia (
views) — jak w Telegramie:15.5K,1.2Mitd.; tylko dla kanałów, dla grup — puste - Powiadomienie o wideo (
message_video_notice) — jeśli w poście jest wideo, ale w tablicymessage_videosnie ma URL, a to pole jest wypełnione: film można obejrzeć tylko w Telegramie po zalogowaniu na własne konto (wymagana autoryzacja), brak bezpośredniego linku do pliku. Nie jest to błąd scrapowania — Telegram nie udostępnia takich filmów bez zalogowania się na konto
Autor posta
- Link do profilu (
user_link) - Imię (
user_name) - URL awatara (
user_avatar)
Przesłanie (forward)
- Skąd przesłano (
forward_from) - Link do źródła (
forward_from_url) — URL oryginału, jeśli jest dostępny - Wyjaśnienie w przypadku braku linku (
forward_from_notice) — wypełniane, jeśliforward_from_urljest pusty (np. „Source link not available in embed”): brak bezpośredniego linku, oryginał mógł zostać usunięty, ukryty lub jest niedostępny z innego powodu. Nie jest to błąd scrapera
Odpowiedź (reply)
- URL wiadomości, na którą udzielono odpowiedzi (
reply_to_url) - ID posta z URL (
reply_to_post_id) - Autor oryginalnej wiadomości (
reply_to_author) - Tekst oryginalnej wiadomości, plain (
reply_to_text)
Reakcje
- Suma wszystkich reakcji (
reactions_total) — liczba jako ciąg znaków;K/M/Bsą przeliczane
Metadane czatu/kanału
Ładowane raz na kanał, powielane w każdym wierszu posta.
- Nazwa (
chat_title) - Liczba subskrybentów/uczestników (
chat_members) - Online (
chat_online) — tylko dla grup; liczba użytkowników online w momencie rozpoczęcia zbierania danych z kanału, nie jest aktualizowana w trakcie scrapowania. Dla kanałów — puste - Opis, plain text (
chat_description) - Liczniki mediów i linków (
chat_photos,chat_videos,chat_files,chat_links) — tylko dla kanałów
Tablice
reactions — pola emoji, count (jak w Telegramie: 16, 1.2K). Kto postawił reakcję — nie jest zbierane: dostępne są tylko typ emoji i łączna liczba
message_photos — pole url; album — kilka wierszy.
message_videos — pole url. Jeśli nie ma URL, a w poście jest wideo — sprawdź message_video_notice (widok tylko po zalogowaniu do Telegrama)
links — pole url; linki zewnętrzne z tekstu posta. Linki typu t.me/username bez ścieżki (path) nie trafiają tutaj (są to wzmianki/mentions).
mentions — pole username (@username); z linków t.me/username oraz tekstu @username w tagach <a>.
Możliwości
- Elastyczna normalizacja zapytań (zobacz Zapytania)
- Filtry według daty (
dateFrom,dateTo) i przesłanych wiadomości (skipForwards) - Albumy zdjęć i wideo — kilka adresów URL w jednym poście
Warianty użycia
- Zbieranie zawartości postów z kanału lub grupy
- Monitorowanie reakcji, wyświetleń i przesłań dalej
Zapytania
Obsługiwane są publiczne kanały i grupy. Wszystkie formaty są sprowadzane do https://t.me/{username}:
| Zapytanie | Zachowanie |
|---|---|
@username | kanał lub grupa, start od Start message number |
username | to samo |
https://t.me/username | to samo |
t.me/username | to samo |
https://t.me/s/username | to samo |
https://t.me/username/123 | kanał lub grupa, start od posta #123 (Start message number jest ignorowany) |
Nieprawidłowe zapytanie → wiersz w logu Unknown query, wynik pusty.
Przykłady:
https://t.me/a_parser
@a_parser
https://t.me/a_parser/100
Warianty wyprowadzania wyników
A-Parser obsługuje elastyczne formatowanie wyników dzięki wbudowanemu silnikowi szablonów Template Toolkit, co pozwala mu na wyprowadzanie wyników w dowolnej formie, a także w formie strukturalnej, na przykład CSV lub JSON
Wynik domyślny
Format wyniku:
$channel/$post_id: $message_text_plain ($views views, $reactions_total reactions)
Przykład wyniku:
a_parser/1234: to są filtry) ( views, 0 reactions)
a_parser/85962: Google wypuścił coś nowego w kwestii ochrony) ( views, 2 reactions)
Wynik w tabeli CSV
Format wyniku:
[% tools.CSVline(channel, post_id, message_text_plain, views, reactions_total) %]
Przykład wyniku:
a_parser,1234,"to są filtry)",,0
a_parser,85962,"Google wypuścił coś nowego w kwestii ochrony)",,2
Filtrowanie i pomijanie postów
Wiersz nie trafia do wyniku, jeśli:
- Data jest poza zakresem Date from / Date to
- Włączona jest opcja Skip forwards i post jest przesłany dalej
Przy filtrowaniu według daty lub forward post jest uznawany za znaleziony, a przeglądanie kanału jest kontynuowane.
Przeglądanie kanału zatrzymuje się, gdy:
- po ostatnim znalezionym poście sprawdzono pod rząd Max empty posts ID bez nowych znalezisk;
- lub wystąpi seria pustych postów od początku (jeśli nie znaleziono jeszcze żadnego posta).
Przetwarzanie wyników
A-Parser pozwala przetwarzać wyniki bezpośrednio podczas scrapowania, w tej sekcji przedstawiliśmy najpopularniejsze przypadki dla scrapera Telegram
Filtrowanie wyników według występowania słów w wiadomości

Należy dodać filtr i wybrać z listy rozwijanej $message_text - Message text. Wybrać typ RegEx match.
W polu dla regexa wpisać wyrażenie regularne z potrzebnymi słowami:
\bscraper\b|\bGoogle\b|\byandex\b|\bscraper\b|\bProxy\b|\bDorki\b
\b - granica słowa
| - LUB
is - flaga regexa
Pobierz przykład
Jak zaimportować przykład do A-Parser
eJyVVN1v2jAQ/18sHjaJ8qFSacobRaLaxEpX6BOg6oovqVfH9myHgTL+952dkMC6
PewhVu53v/v2uWQe3Jt7sOjQO5asSmbiP0uYR4mZhfyK6+0V7iE3ElmXGbAObeCu
2LKmJMmd1YVZbC0YtETimEIhPeuWzB8MkrdUSB9V5D5oEpajc5Dhs8c9EWvCsmJb
zMFvXwnegSwCsl6/rIvB6DqN5yCco+ocRuSmRtYvv+i70zqTWAsHUBz3tfAfToIw
TFvSNcYTzgw+nVNHLak2gIZElWjjhVZUinDsuNmcOuGm2lKxhHfMsFd3v1EuYIdL
XfUPW3hK0j3koTEdDh6DtpdGRx8+9nxsKHAuQkSQVYQwsjbqkxI/YmOVJi79WoFu
anUeJx8dBPBwym7FOlFm5KKItt8qG5akIB12maNUp0CJ8D81ggYLXtt57ADhJdNq
LOUMdyhbWvR/WwjJ6X6NUzL6XBv+nTJ/5+PYlHceaof2p6UcGi9Rup1/ba24numM
KudhUFLkwpPsJrpQYTADAt8QTdOz+9CzXFtswnhbYBOc1smg4kRsJzY2LXRRxcVU
LsGtVqnI5pS/FRxPzEItaWfnaqLDRoayVCElTcXhY3s7xq6eQhCayt8ZT2KIUPlp
Y5nXWroviypVYwXdvpuQYE6NPI9au9yClE+Ps3MNa28UCa/eG5f0+76XYx+eq/eD
BUOPmaYbRWUdN83D0rxF5b+el6Q80si+u4fKIBQY6IRRp1zcseHxN9yRrow=
Zobacz także:
Możliwe ustawienia
| Parametr | Wartość domyślna | Opis |
|---|---|---|
| Max empty posts | 1000 | Ile pustych ID z rzędu sprawdzać po ostatnim znalezionym poście przed zatrzymaniem skanowania kanału. To nie jest limit zapisanych postów |
| Start message number | 1 | Numer posta, od którego należy zacząć skanowanie (jeśli w zapytaniu nie ma /123) |
| Skip forwards | ☐ | Nie zapisuj wiadomości przekazanych dalej |
| Date from | Data od, włącznie. Format YYYY-MM-DD | |
| Date to | Data do, bez daty końcowej. Format YYYY-MM-DD |