跳转到主要内容

Telegram::GroupScraper - Telegram 公开频道与群组爬虫工具

Telegram

爬虫工具概览

该爬虫工具用于采集 Telegram 公开频道和群组中的所有帖子和消息。

其工作逻辑与其他爬虫工具不同:它会自动遍历频道或群组中的消息。因此,不能在同一个任务中将其与其他爬虫工具结合使用。

结果中的行顺序不保证按帖子编号排列(取决于线程)。聊天/频道的元数据每个频道仅加载一次,并在帖子的每一行中重复显示

得益于内置强大的 Template Toolkit 模板引擎,您可以按所需的格式和结构保存结果,该引擎允许对结果应用额外逻辑并以各种格式输出数据,包括 JSON、SQL 和 CSV

爬虫工具应用案例

采集的数据

适用于公开频道和群组。

消息

  • 帖子链接 (url)
  • 帖子 ID (post_id)
  • 不带 @ 的频道/群组用户名 (channel)
  • 带 HTML 的帖子文本 (message_text)
  • 不带 HTML 的纯文本 (message_text_plain) — 用于过滤、搜索和输出
  • ISO 格式日期 (message_date)
  • 浏览量 (views) — 格式同 Telegram:15.5K1.2M 等;仅限频道,群组为空
  • 视频提示 (message_video_notice) — 如果帖子中有视频,但 message_videos 数组中没有 URL,且该字段已填充:则该视频只能在登录后的 Telegram 中查看(需要授权),没有直接的文件链接。这不是采集错误 — Telegram 不会在未登录账号的情况下提供此类视频

帖子作者

  • 个人资料链接 (user_link)
  • 名称 (user_name)
  • 头像 URL (user_avatar)

转发

  • 转发自 (forward_from)
  • 来源链接 (forward_from_url) — 原帖 URL(如果可用)
  • 无链接时的说明 (forward_from_notice) — 当 forward_from_url 为空时填充(例如 "Source link not available in embed"):表示没有直接链接,原帖可能已被删除、隐藏或因其他原因无法访问。这不是爬虫工具的错误

回复 (reply)

  • 所回复消息的 URL (reply_to_url)
  • URL 中的帖子 ID (reply_to_post_id)
  • 原消息作者 (reply_to_author)
  • 原消息纯文本 (reply_to_text)

反应

  • 反应总数 (reactions_total) — 字符串形式的数字;K/M/B 会被换算

聊天/频道元数据

每个频道加载一次,并重复显示在帖子的每一行中。

  • 名称 (chat_title)
  • 订阅者/成员数量 (chat_members)
  • 在线人数 (chat_online) — 仅限群组;开始采集该频道时刻的在线用户数,数据抓取过程中不更新。频道为空
  • 纯文本描述 (chat_description)
  • 媒体和链接计数器 (chat_photos, chat_videos, chat_files, chat_links) — 仅限频道

数组

reactions — 包含 emojicount 字段(格式同 Telegram:161.2K)。不采集谁留下了反应:仅提供表情符号类型和总数

message_photosurl 字段;相册会分为多行显示。

message_videosurl 字段。如果没有 URL 但帖子中有视频,请查看 message_video_notice(仅限登录 Telegram 后查看)

linksurl 字段;帖子文本中的外部链接。不带路径的 t.me/username 格式链接不计入此处(这些属于 mentions)。

mentionsusername 字段 (@username);来自 t.me/username 链接和 <a> 标签中的 @username 文本。

功能

  • 灵活的查询归一化(参见 查询
  • 按日期过滤 (dateFrom, dateTo) 和过滤转发消息 (skipForwards)
  • 照片和视频相册 — 同一帖子中包含多个 URL

使用场景

  • 采集频道或群组的帖子内容
  • 监控反应、浏览量和转发情况

查询

支持公开频道和群组。所有格式都会转换为 https://t.me/{username}

查询行为
@username频道或群组,从 Start message number 开始
username同上
https://t.me/username同上
t.me/username同上
https://t.me/s/username同上
https://t.me/username/123频道或群组,从帖子 #123 开始(忽略 Start message number

无效查询 → 日志记录 Unknown query,结果为空。

示例:

https://t.me/a_parser
@a_parser
https://t.me/a_parser/100

结果输出示例

A-Parser 凭借内置的 Template Toolkit 支持灵活的结果格式化,这使其能够以任意形式以及结构化形式(如 CSV 或 JSON)输出结果。

默认输出

结果格式:

$channel/$post_id: $message_text_plain ($views views, $reactions_total reactions)

结果示例:

a_parser/1234: 这是过滤器) ( views, 0 reactions)
a_parser/85962: Google 推出了新的防护措施) ( views, 2 reactions)

输出到 CSV 表格

结果格式:

[% tools.CSVline(channel, post_id, message_text_plain, views, reactions_total) %]

结果示例:

a_parser,1234,"这是过滤器)",,0
a_parser,85962,"Google 推出了新的防护措施)",,2

过滤与跳过帖子

在以下情况下,行不会进入结果

  1. 日期超出 Date from / Date to 范围
  2. 启用了 Skip forwards 且帖子是转发的

当按日期或转发过滤时,帖子被视为已找到,频道遍历将继续。

频道遍历在以下情况停止:

  • 在最后一个找到的帖子之后,连续检查了 Max empty posts 个 ID 均无新发现;
  • 或从开始起连续出现空帖子(如果尚未找到任何帖子)。

结果处理

A-Parser 允许在数据抓取过程中直接处理结果,在本节中我们列出了 Telegram 爬虫工具最受欢迎的案例。

按消息中的关键词过滤结果

示例

需要添加过滤器并在下拉列表中选择 $message_text - Message text。选择类型 RegEx match。 在正则表达式字段中输入包含所需关键词的正则:

\b爬虫工具\b|\bGoogle\b|\byandex\b|\b爬虫工具\b|\b代理\b|\bDorks\b

\b - 单词边界

| - 或

is - 正则表达式标志

下载示例

如何将示例导入 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=

可选设置

参数默认值描述
Max empty posts1000在找到最后一个帖子后,连续尝试多少个 ID 后停止遍历频道。这不是已保存帖子的限制
Start message number1开始遍历的帖子编号(如果查询中没有 /123
Skip forwards不保存转发的消息
Date from起始日期,包含。格式为 YYYY-MM-DD
Date to截止日期,包含。格式为 YYYY-MM-DD