作为Telegram频道的管理员,你是否曾需要分析订阅者数据、进行用户调研或迁移社群?Telegram官方并未提供直接导出订阅者列表的按钮,但通过Telegram API和Python,我们可以轻松实现这一需求。本文将手把手教你从零开始,将频道订阅者的用户名、ID、加入时间等信息导出为结构清晰的Excel表格,整个过程安全、高效,且完全符合Telegram服务条款。
准备工作:你需要什么?
在开始编写脚本前,请确保你具备以下条件:
- 一个Telegram账号(建议使用专门的管理员账号,避免主账号受速率限制影响)
- Python 3.8或以上版本
- 你的频道/群组的完全管理权限(能够添加机器人或使用用户API)
- 一个文本编辑器(如VS Code或Notepad++)
第一步:申请Telegram API ID和API Hash
要访问Telegram API,你需要获取唯一的API ID和API Hash。操作如下:
- 访问
https://my.telegram.org并使用你的Telegram账号登录(注意:必须使用手机号验证)。 - 点击“API development tools”选项卡。
- 填写应用名称(例如“Subscriber Exporter”)和平台(Desktop),其他字段可选。
- 点击“Create Application”按钮,页面会显示API ID和API Hash,复制并妥善保存。
请务必保密这两个值,不要泄露给任何人,否则他人可以控制你的账号。
第二步:安装Python依赖库
打开终端或命令行,执行以下命令安装所需库:
pip install telethon pandas openpyxltelethon:Telegram客户端库,用于与MTProto API交互pandas:数据操作利器,方便转换和清洗数据openpyxl:用于生成Excel文件
第三步:编写脚本获取订阅者数据
新建一个Python文件,例如 export_subscribers.py,将以下代码粘贴进去并保存:
import pandas as pd
from telethon.sync import TelegramClient
from telethon.tl.functions.channels import GetFullChannelRequest
from telethon.tl.functions.messages import GetDialogsRequest
from telethon.tl.types import InputPeerChannel
# 你的API ID和API Hash
api_id = '你的API_ID'
api_hash = '你的API_HASH'
# 设置会话文件,避免频繁登录
client = TelegramClient('session_name', api_id, api_hash)
client.start()
# 选择目标频道(支持输入频道链接或用户名)
entity = client.get_entity('@你的频道用户名')
# 获取频道所有成员
members = client.get_participants(entity, aggressive=True)
# 转换为DataFrame
rows = []
for member in members:
rows.append({
'用户ID': member.id,
'用户名': member.username or '',
'姓氏': member.last_name or '',
'名字': member.first_name or '',
'手机号': member.phone or '',
'加入时间': member.date.strftime('%Y-%m-%d %H:%M:%S') if member.date else '',
'是否机器人': member.bot if hasattr(member, 'bot') else False,
})
df = pd.DataFrame(rows)
# 保存到Excel
df.to_excel('频道订阅者.xlsx', index=False, engine='openpyxl')
print(f'成功导出 {len(rows)} 条数据')重要说明:
- 将
api_id和api_hash替换为你在第一步获得的值。 - 将
@你的频道用户名更换为你的频道链接,例如@example_channel。 - 如果频道是私密频道,你需要用拥有管理权限的账号先加入该频道。
第四步:运行脚本并检查输出
在终端中运行以下命令:
python export_subscribers.py首次运行会要求你输入手机号和验证码,之后会话会被保存,后续无需重复登录。脚本执行完毕后,当前目录下会生成 频道订阅者.xlsx 文件。
第五步:处理可能遇到的问题
1. 权限不足
如果脚本报错 ParticipantsFetchError,请确保你的账号在频道中拥有“添加成员”或“管理成员”权限。对于大型频道(超过500人),Telegram可能会限制非管理员账号获取完整列表。
2. 速率限制
Telegram API对频繁请求有限制。脚本使用 aggressive=True 会尽可能快地获取,但可能触发限流。若遇到错误,可添加 sleep 延迟:
import time
time.sleep(1)3. 导出中文乱码
确保Excel文件编码为UTF-8,上述代码已正确处理。如果仍乱码,请使用 openpyxl 的 write_only 模式或导出为CSV后再转换。
进阶:定时自动导出与增量更新
如果你希望每天自动导出订阅者数据,可以使用Windows任务计划程序或Linux cron。配合 telethon 的会话文件,你可以无交互运行脚本。此外,通过记录上次导出时的用户ID,可以实现增量更新,避免重复拉取所有成员,降低API负载。
总结
通过Telegram官方API,导出频道订阅者数据并非难事。本文提供了一套完整的解决方案,从申请API到编写Python脚本,再到处理常见异常,你完全可以自动化这一过程。合理利用这些数据,你能够更深入地了解频道的受众,优化运营策略,甚至为数据迁移提供基础。记住,任何自动化操作都需遵守Telegram服务条款,尊重用户隐私,不要将数据用于恶意用途。