Telegram::GroupScraper - Scraper di canali e gruppi pubblici Telegram

Panoramica dello scraper
Lo scraper raccoglie tutti i post e i messaggi da canali e gruppi pubblici Telegram.
La logica di funzionamento differisce dagli altri scraper: esso scansiona automaticamente i messaggi nel canale o nel gruppo. Per questo motivo, non è possibile utilizzarlo insieme ad altri scraper nella stessa attività.
L'ordine delle righe nel risultato non è garantito in base al numero del post (dipende dai thread). I metadati della chat/canale vengono caricati una volta per canale e duplicati in ogni riga del post.
Il salvataggio dei risultati è possibile nel formato e nella struttura necessari, grazie al potente motore di modelli integrato Template Toolkit che consente di applicare logica aggiuntiva ai risultati e di esportare i dati in vari formati, tra cui JSON, SQL e CSV.
Casi d'uso dello scraper
🔗 Scraping utenti
Scraping degli utenti dai gruppi pubblici di Telegram
🔗 Scraping di tutti i messaggi
Scraping di tutti i messaggi dai gruppi pubblici di Telegram
Dati raccolti
Funziona con canali e gruppi pubblici.
Messaggio
- Link al post (
url) - ID del post (
post_id) - Username del canale/gruppo senza
@(channel) - Testo del post con HTML (
message_text) - Lo stesso testo senza HTML (
message_text_plain) — per filtri, ricerca e output - Data in formato ISO (
message_date) - Visualizzazioni (
views) — come in Telegram:15.5K,1.2Mecc.; solo per i canali, per i gruppi è vuoto - Avviso video (
message_video_notice) — se nel post è presente un video, ma nell'arraymessage_videosnon c'è l'URL, e questo campo è compilato: il video può essere visualizzato solo in Telegram con il proprio account (è richiesta l'autorizzazione), non c'è un link diretto al file. Questo non è un errore di raccolta — Telegram non fornisce tali video senza aver effettuato l'accesso all'account
Autore del post
- Link al profilo (
user_link) - Nome (
user_name) - URL dell'avatar (
user_avatar)
Inoltro
- Da dove è stato inoltrato (
forward_from) - Link alla fonte (
forward_from_url) — URL dell'originale, se disponibile - Nota in assenza di link (
forward_from_notice) — compilato seforward_from_urlè vuoto (ad esempio, "Source link not available in embed"): non c'è un link diretto, l'originale potrebbe essere stato eliminato, nascosto o non disponibile per altri motivi. Non è un errore dello scraper
Risposta (reply)
- URL del messaggio a cui si risponde (
reply_to_url) - ID del post dall'URL (
reply_to_post_id) - Autore del messaggio originale (
reply_to_author) - Testo del messaggio originale, plain (
reply_to_text)
Reazioni
- Somma di tutte le reazioni (
reactions_total) — numero come stringa;K/M/Bvengono convertiti
Metadati della chat/canale
Caricati una volta per canale, duplicati in ogni riga del post.
- Titolo (
chat_title) - Numero di iscritti/membri (
chat_members) - Online (
chat_online) — solo per i gruppi; numero di utenti online al momento dell'inizio della raccolta per il canale, non viene aggiornato durante lo scraping. Per i canali è vuoto - Descrizione, plain text (
chat_description) - Contatori media e link (
chat_photos,chat_videos,chat_files,chat_links) — solo per i canali
Array
reactions — campi emoji, count (come in Telegram: 16, 1.2K). Chi ha messo la reazione non viene raccolto: sono disponibili solo il tipo di emoji e il numero totale
message_photos — campo url; album — righe multiple.
message_videos — campo url. Se l'URL non è presente, ma nel post c'è un video — vedere message_video_notice (visualizzazione solo dopo l'accesso a Telegram)
links — campo url; link esterni dal testo del post. I link del tipo t.me/username senza path non rientrano qui (sono menzioni).
mentions — campo username (@username); dai link t.me/username e dal testo @username in <a>.
Funzionalità
- Normalizzazione flessibile delle query (vedi Query)
- Filtri per data (
dateFrom,dateTo) e messaggi inoltrati (skipForwards) - Album di foto e video — più URL in un unico post
Casi d'uso
- Raccolta del contenuto dei post di un canale o gruppo
- Monitoraggio di reazioni, visualizzazioni e inoltri
Query
Sono supportati canali e gruppi pubblici. Tutti i formati vengono convertiti in https://t.me/{username}:
| Query | Comportamento |
|---|---|
@username | canale o gruppo, inizio da Start message number |
username | lo stesso |
https://t.me/username | lo stesso |
t.me/username | lo stesso |
https://t.me/s/username | lo stesso |
https://t.me/username/123 | canale o gruppo, inizio dal post #123 (Start message number viene ignorato) |
Query non valida → riga nel log Unknown query, risultato vuoto.
Esempi:
https://t.me/a_parser
@a_parser
https://t.me/a_parser/100
Esempi di output dei risultati
A-Parser supporta la formattazione flessibile dei risultati grazie al motore di modelli integrato Template Toolkit, che gli consente di produrre risultati in forma libera o strutturata, come CSV o JSON
Output predefinito
Formato del risultato:
$channel/$post_id: $message_text_plain ($views views, $reactions_total reactions)
Esempio di risultato:
a_parser/1234: questi sono filtri) ( views, 0 reactions)
a_parser/85962: Google ha rilasciato qualcosa di nuovo per la protezione) ( views, 2 reactions)
Output in tabella CSV
Formato del risultato:
[% tools.CSVline(channel, post_id, message_text_plain, views, reactions_total) %]
Esempio di risultato:
a_parser,1234,"questi sono filtri)",,0
a_parser,85962,"Google ha rilasciato qualcosa di nuovo per la protezione)",,2
Filtrazione e salto dei post
Una riga non finisce nel risultato se:
- La data è fuori dall'intervallo Date from / Date to
- È attivo Skip forwards e il post è inoltrato
Con il filtro per data o forward, il post è considerato trovato, la scansione del canale continua.
La scansione del canale si ferma quando:
- dopo l'ultimo post trovato, sono stati controllati consecutivamente Max empty posts ID senza nuovi ritrovamenti;
- oppure una serie di post vuoti dall'inizio (se non è stato ancora trovato alcun post).
Elaborazione dei risultati
A-Parser consente di elaborare i risultati direttamente durante lo scraping; in questa sezione abbiamo riportato i casi più popolari per lo scraper Telegram
Filtrare i risultati per occorrenza di parole nel messaggio

È necessario aggiungere un filtro e selezionare nel menu a discesa $message_text - Message text. Selezionare il tipo RegEx match.
Nel campo per la regex inserire la regex con le parole necessarie:
\bscraper\b|\bGoogle\b|\byandex\b|\bscraper\b|\bProxy\b|\bDork\b
\b - confine della parola
| - OPPURE
is - flag della regex
Scarica esempio
Come importare un esempio in 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=
Impostazioni possibili
| Parametro | Valore predefinito | Descrizione |
|---|---|---|
| Max empty posts | 1000 | Quanti ID vuoti consecutivi provare dopo l'ultimo post trovato, prima di interrompere la scansione del canale. Non è il limite dei post salvati |
| Start message number | 1 | Numero del post da cui iniziare la scansione (se nella query non è presente /123) |
| Skip forwards | ☐ | Non salvare i messaggi inoltrati |
| Date from | Data da, inclusa. Formato YYYY-MM-DD | |
| Date to | Data fino a, esclusa. Formato YYYY-MM-DD |