Telegram::GroupScraper - Scraper de canaux et groupes publics Telegram

Présentation du scraper
Le scraper collecte tous les posts et messages des canaux et groupes publics Telegram.
La logique de fonctionnement diffère des autres scrapers : il parcourt automatiquement les messages dans le canal ou le groupe. Pour cette raison, il ne peut pas être utilisé avec d'autres scrapers dans la même tâche.
L'ordre des lignes dans le résultat n'est pas garanti par numéro de post (dépend des threads). Les métadonnées du chat/canal sont chargées une seule fois par canal et sont dupliquées dans chaque ligne de post.
La sauvegarde des résultats est possible dans la forme et la structure dont vous avez besoin, grâce au puissant moteur de gabarits intégré Template Toolkit qui permet d'appliquer une logique supplémentaire aux résultats et d'afficher les données dans divers formats, y compris JSON, SQL et CSV.
Cas d'utilisation du scraper
🔗 Collecte de données des utilisateurs
Collecte de données des utilisateurs des groupes publics dans Telegram
🔗 Collecte de tous les messages
Collecte de tous les messages des groupes publics dans Telegram
Données collectées
Fonctionne avec les canaux et les groupes publics.
Message
- Lien vers le post (
url) - ID du post (
post_id) - Nom d'utilisateur du canal/groupe sans
@(channel) - Texte du post avec HTML (
message_text) - Le même texte sans HTML (
message_text_plain) — pour les filtres, la recherche et l'affichage - Date au format ISO (
message_date) - Vues (
views) — comme dans Telegram :15.5K,1.2M, etc. ; uniquement pour les canaux, vide pour les groupes - Notification de vidéo (
message_video_notice) — si le post contient une vidéo mais que le tableaumessage_videosne contient pas d'URL, et que ce champ est rempli : la vidéo peut être visionnée uniquement dans Telegram sous votre propre compte (authentification requise), il n'y a pas de lien direct vers le fichier. Ce n'est pas une erreur de collecte — Telegram ne fournit pas ces vidéos sans connexion au compte
Auteur du post
- Lien vers le profil (
user_link) - Nom (
user_name) - URL de l'avatar (
user_avatar)
Transfert
- Origine du transfert (
forward_from) - Lien vers la source (
forward_from_url) — URL de l'original, si disponible - Explication en l'absence de lien (
forward_from_notice) — rempli siforward_from_urlest vide (par exemple, « Source link not available in embed ») : il n'y a pas de lien direct, l'original a pu être supprimé, masqué ou est inaccessible pour une autre raison. Ce n'est pas une erreur du scraper
Réponse (reply)
- URL du message auquel on répond (
reply_to_url) - ID du post extrait de l'URL (
reply_to_post_id) - Auteur du message d'origine (
reply_to_author) - Texte du message d'origine, plain (
reply_to_text)
Réactions
- Somme de toutes les réactions (
reactions_total) — nombre sous forme de chaîne ;K/M/Bsont convertis
Métadonnées du chat/canal
Chargées une seule fois par canal, dupliquées dans chaque ligne de post.
- Titre (
chat_title) - Nombre d'abonnés/membres (
chat_members) - En ligne (
chat_online) — uniquement pour les groupes ; nombre d'utilisateurs en ligne au moment du début de la collecte sur le canal, n'est pas mis à jour pendant le processus. Vide pour les canaux - Description, plain text (
chat_description) - Compteurs de médias et de liens (
chat_photos,chat_videos,chat_files,chat_links) — uniquement pour les canaux
Tableaux
reactions — champs emoji, count (comme dans Telegram : 16, 1.2K). L'identité de ceux qui ont réagi n'est pas collectée : seuls le type d'emoji et le nombre total sont disponibles
message_photos — champ url ; album — plusieurs lignes.
message_videos — champ url. Si l'URL est absente mais qu'il y a une vidéo dans le post — voir message_video_notice (visionnage uniquement après connexion à Telegram)
links — champ url ; liens externes provenant du texte du post. Les liens de type t.me/username sans chemin n'y figurent pas (ce sont des mentions).
mentions — champ username (@username) ; provenant des liens t.me/username et du texte @username dans les balises <a>.
Fonctionnalités
- Normalisation flexible des requêtes (voir Requêtes)
- Filtres par date (
dateFrom,dateTo) et par messages transférés (skipForwards) - Albums photo et vidéo — plusieurs URL dans un seul post
Cas d'utilisation
- Collecte du contenu des posts d'un canal ou d'un groupe
- Surveillance des réactions, des vues et des transferts
Requêtes
Les canaux et groupes publics sont supportés. Tous les formats sont convertis en https://t.me/{username} :
| Requête | Comportement |
|---|---|
@username | chaîne ou groupe, démarrage à partir de Start message number |
username | identique |
https://t.me/username | identique |
t.me/username | identique |
https://t.me/s/username | identique |
https://t.me/username/123 | chaîne ou groupe, démarrage au post #123 (Start message number est ignoré) |
Requête invalide → ligne Unknown query dans le log, résultat vide.
Exemples :
https://t.me/a_parser
@a_parser
https://t.me/a_parser/100
Variantes d'affichage des résultats
A-Parser prend en charge un formatage flexible des résultats grâce au moteur de gabarits intégré Template Toolkit, ce qui lui permet d'afficher les résultats sous une forme libre, ainsi que structurée, par exemple CSV ou JSON.
Affichage par défaut
Format du résultat :
$channel/$post_id: $message_text_plain ($views views, $reactions_total reactions)
Exemple de résultat :
a_parser/1234: ce sont des filtres) ( views, 0 reactions)
a_parser/85962: Google a sorti quelque chose de nouveau pour la protection) ( views, 2 reactions)
Affichage dans un tableau CSV
Format du résultat :
[% tools.CSVline(channel, post_id, message_text_plain, views, reactions_total) %]
Exemple de résultat :
a_parser,1234,"ce sont des filtres)",,0
a_parser,85962,"Google a sorti quelque chose de nouveau pour la protection)",,2
Filtrage et omission de posts
Une ligne ne figure pas dans le résultat si :
- La date est hors de la plage Date from / Date to
- L'option Skip forwards est activée et le post est un transfert
Lors d'un filtrage par date ou transfert, le post est considéré comme trouvé, le parcours du canal continue.
Le parcours du canal s'arrête quand :
- après le dernier post trouvé, Max empty posts ID consécutifs ont été vérifiés sans nouvelles découvertes ;
- ou une série de posts vides dès le début (si aucun post n'a encore été trouvé).
Traitement des résultats
A-Parser permet de traiter les résultats directement pendant la collecte de données, dans cette section nous avons listé les cas les plus populaires pour le scraper Telegram.
Filtrage des résultats par présence de mots dans le message

Il est nécessaire d'ajouter un filtre et de choisir dans la liste déroulante $message_text - Message text. Choisir le type RegEx match.
Dans le champ pour la regex, inscrire la regex avec les mots nécessaires :
\bscraper\b|\bGoogle\b|\byandex\b|\bscraper\b|\bProxy\b|\bDorks\b
\b - limite de mot
| - OU
is - drapeau de la regex
Télécharger l'exemple
Comment importer l'exemple dans 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=
Paramètres possibles
| Paramètre | Valeur par défaut | Description |
|---|---|---|
| Max empty posts | 1000 | Nombre d'ID vides consécutifs à essayer après le dernier post trouvé avant d'arrêter le parcours du canal. Ce n'est pas une limite de posts sauvegardés |
| Start message number | 1 | Numéro du post par lequel commencer le parcours (si la requête ne contient pas /123) |
| Skip forwards | ☐ | Ne pas sauvegarder les messages transférés |
| Date from | Date de, inclusivement. Format YYYY-MM-DD | |
| Date to | Date jusqu'à, non inclus. Format YYYY-MM-DD |