Telegram::GroupScraper - Extractor de canales y grupos públicos de Telegram

Información general del extractor
El extractor recopila todas las publicaciones y mensajes de canales y grupos públicos de Telegram.
La lógica de funcionamiento difiere de otros extractores: itera automáticamente a través de los mensajes en el canal o grupo. Debido a esto, no se puede utilizar junto con otros extractores en la misma tarea.
El orden de las líneas en el resultado no está garantizado por el número de publicación (depende de los hilos). Los metadatos del chat/canal se cargan una vez por canal y se duplican en cada línea de la publicación.
Es posible guardar los resultados en la forma y estructura que necesite, gracias al potente motor de plantillas integrado Template Toolkit que permite aplicar lógica adicional a los resultados y exportar datos en varios formatos, incluyendo JSON, SQL y CSV.
Casos de uso del extractor
🔗 Extracción de usuarios
Extracción de usuarios de grupos públicos en Telegram
🔗 Extracción de todos los mensajes
Extracción de todos los mensajes de grupos públicos en Telegram
Datos recopilados
Funciona con canales y grupos públicos.
Mensaje
- Enlace al post (
url) - ID del post (
post_id) - Username del canal/grupo sin
@(channel) - Texto del post con HTML (
message_text) - El mismo texto sin HTML (
message_text_plain) — para filtros, búsqueda y salida - Fecha en ISO (
message_date) - Vistas (
views) — como en Telegram:15.5K,1.2M, etc.; solo para canales, para grupos está vacío - Aviso de video (
message_video_notice) — si el post tiene video, pero en el arraymessage_videosno hay URL, y este campo está lleno: el video solo se puede ver en Telegram con su propia cuenta (requiere autorización), no hay enlace directo al archivo. Esto no es un error de extracción — Telegram no entrega tales videos sin iniciar sesión
Autor del post
- Enlace al perfil (
user_link) - Nombre (
user_name) - URL del avatar (
user_avatar)
Reenvío
- Desde dónde se reenvió (
forward_from) - Enlace a la fuente (
forward_from_url) — URL del original, si está disponible - Explicación ante la falta de enlace (
forward_from_notice) — se completa siforward_from_urlestá vacío (por ejemplo, «Source link not available in embed»): no hay enlace directo, el original pudo ser eliminado, oculto o no estar disponible por otra razón. No es un error del extractor
Respuesta (reply)
- URL del mensaje al que se responde (
reply_to_url) - ID del post desde la URL (
reply_to_post_id) - Autor del mensaje original (
reply_to_author) - Texto del mensaje original, plain (
reply_to_text)
Reacciones
- Suma de todas las reacciones (
reactions_total) — número como cadena;K/M/Bse recalculan
Metadatos del chat/canal
Se cargan una vez por canal, se duplican en cada línea del post.
- Título (
chat_title) - Número de suscriptores/miembros (
chat_members) - En línea (
chat_online) — solo para grupos; número de usuarios en línea al momento de iniciar la recolección por canal, no se actualiza durante la extracción de datos. Para canales está vacío - Descripción, plain text (
chat_description) - Contadores de media y enlaces (
chat_photos,chat_videos,chat_files,chat_links) — solo para canales
Arrays
reactions — campos emoji, count (como en Telegram: 16, 1.2K). Quién puso la reacción no se recopila: solo están disponibles el tipo de emoji y el número total
message_photos — campo url; álbum — varias líneas.
message_videos — campo url. Si no hay URL, pero hay video en el post — vea message_video_notice (visualización solo después de entrar en Telegram)
links — campo url; enlaces externos del texto del post. Los enlaces tipo t.me/username sin path no entran aquí (son menciones).
mentions — campo username (@username); de enlaces t.me/username y texto @username en <a>.
Características
- Normalización flexible de consultas (ver Consultas)
- Filtros por fecha (
dateFrom,dateTo) y mensajes reenviados (skipForwards) - Álbumes de fotos y videos — varias URL en un solo post
Variantes de uso
- Recopilación del contenido de posts de un canal o grupo
- Monitoreo de reacciones, vistas y reenvíos
Consultas
Se admiten canales y grupos públicos. Todos los formatos se convierten a https://t.me/{username}:
| Consulta | Comportamiento |
|---|---|
@username | canal o grupo, inicio desde Start message number |
username | lo mismo |
https://t.me/username | lo mismo |
t.me/username | lo mismo |
https://t.me/s/username | lo mismo |
https://t.me/username/123 | canal o grupo, inicio desde la publicación #123 (Start message number se ignora) |
Consulta no válida → línea en el log Unknown query, resultado vacío.
Ejemplos:
https://t.me/a_parser
@a_parser
https://t.me/a_parser/100
Variantes de salida de resultados
A-Parser admite un formateo flexible de los resultados gracias al motor de plantillas integrado Template Toolkit, lo que le permite mostrar los resultados en forma libre, así como estructurada, por ejemplo CSV o JSON.
Salida por defecto
Formato del resultado:
$channel/$post_id: $message_text_plain ($views views, $reactions_total reactions)
Ejemplo de resultado:
a_parser/1234: esto son filtros) ( views, 0 reactions)
a_parser/85962: Google ha lanzado algo nuevo en cuanto a protección) ( views, 2 reactions)
Salida en tabla CSV
Formato del resultado:
[% tools.CSVline(channel, post_id, message_text_plain, views, reactions_total) %]
Ejemplo de resultado:
a_parser,1234,"esto son filtros)",,0
a_parser,85962,"Google ha lanzado algo nuevo en cuanto a protección)",,2
Filtrado y omisión de posts
La línea no entra en el resultado si:
- La fecha está fuera del rango Date from / Date to
- Está activado Skip forwards y el post es reenviado
Con el filtro por fecha o forward, el post se considera encontrado, el recorrido del canal continúa.
El recorrido del canal se detiene cuando:
- después del último post encontrado se han verificado consecutivamente Max empty posts IDs sin nuevos hallazgos;
- o una serie de posts vacíos desde el principio (si aún no se ha encontrado ningún post).
Procesamiento de resultados
A-Parser permite procesar los resultados directamente durante la extracción de datos; en esta sección presentamos los casos más populares para el extractor de Telegram.
Filtrado de resultados por la presencia de palabras en el mensaje

Es necesario añadir un filtro y seleccionar en la lista desplegable $message_text - Message text. Seleccionar el tipo RegEx match.
En el campo para la expresión regular, escriba la expresión regular con las palabras necesarias:
\bextractor\b|\bGoogle\b|\byandex\b|\bextractor\b|\bProxy\b|\bDorks\b
\b - límite de palabra
| - O
is - bandera de expresión regular
Descargar ejemplo
Cómo importar un ejemplo a 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=
Configuraciones posibles
| Parámetro | Valor por defecto | Descripción |
|---|---|---|
| Max empty posts | 1000 | Cuántos ID vacíos seguidos intentar después del último post encontrado, luego se detiene el recorrido del canal. No es un límite de posts guardados |
| Start message number | 1 | Número del post desde el cual comenzar el recorrido (si no hay /123 en la consulta) |
| Skip forwards | ☐ | No guardar mensajes reenviados |
| Date from | Fecha desde, inclusive. Formato YYYY-MM-DD | |
| Date to | Fecha hasta, no inclusive. Formato YYYY-MM-DD |