使用Telethon提取TG公开群用户仅能获取约90%成员问题咨询
问题原因
- Telegram官方接口限制:普通用户账号拉取群成员时,平台默认有两个维度的过滤:一是隐私规则过滤,设置了「不让陌生人查看自己加入的群组」权限的用户,不会出现在非管理员拉取的成员列表中;二是规模限制,成员数超过5000的公开群,非管理员账号最多只能拉取到近期活跃的约80%-90%用户,10万以上成员的超级群,官方直接不开放全量成员拉取权限。
- 反爬机制触发:你当前代码直接一次性拉取所有成员,速率过快时TG会自动截断返回结果,不会抛出报错,只会返回部分成员数据。
- 账号权限不足:新注册、没有正常使用痕迹的账号,拉取成员的权限会被进一步收紧,返回的成员数量更少。
修复方案
- 优先使用目标群的管理员账号执行拉取,管理员账号不受普通用户的隐私过滤和规模限制,可以拉取到全量成员。
- 替换原有的一次性拉取成员逻辑,改为手动分页拉取,添加延迟避免触发反爬,修改代码如下:
首先导入time模块:
import time
然后替换all_participants = client.get_participants(target_group, aggressive=True)这部分代码:
print('Fetching Members...') all_participants = [] offset = 0 # 每次拉取200个,为TG接口允许的单次最大拉取量 limit = 200 while True: participants = client.get_participants(target_group, offset=offset, limit=limit) # 拉取不到新成员时终止循环 if not participants: break all_participants.extend(participants) offset += limit # 每次拉取后停顿1秒,避免触发速率限制 time.sleep(1)
- 避免使用新注册账号执行拉取,选择注册时间超过3个月、有正常聊天、加群记录的老号,拉取成功率更高。
- 如果目标群是10万成员以上的超级群,目前没有公开方案可以拉取全量成员,只能拿到平台返回的近期活跃用户。
内容的提问来源于stack exchange,提问作者XYD
相关产品推荐
相关产品推荐

