批量获取Telegram用户头像并按姓名+手机号分类存储需求咨询
批量获取Telegram用户头像并分类存储的实现步骤
1. 获取Telegram开发者凭证
- 登录Telegram官方开发者平台,创建新应用,记录生成的
API_ID和API_HASH(这两个是调用Telegram API的核心凭证)。
2. 安装依赖工具
- 安装Python(确保勾选“Add Python to PATH”选项,方便终端调用)。
- 打开终端/命令提示符,执行
pip install telethon,安装用于操作Telegram API的第三方库。
3. 整理用户名单
- 将用户姓名和手机号整理为CSV格式文件(命名为
users.csv),示例格式如下:
注意:手机号必须带国际区号(如中国用户前缀为+86),否则无法匹配到对应的Telegram用户。姓名,手机号 张三,+8613800138000 李四,+8613900139000
4. 编写执行脚本
- 创建
get_avatars.py文件,复制以下代码并替换占位符为你的实际信息:from telethon import TelegramClient import csv import os import asyncio # 替换为你的API凭证和Telegram绑定手机号 API_ID = 123456 # 替换成你的数字ID API_HASH = 'your_api_hash_here' PHONE_NUMBER = '+8613xxxxxxxxx' async def fetch_avatar(phone, target_folder): try: # 通过手机号定位Telegram用户 user = await client.get_entity(phone) # 下载头像到指定文件夹 avatar_file = await client.download_profile_photo(user.id, file=target_folder) if avatar_file: print(f"✅ 已保存 {target_folder} 的头像") else: print(f"ℹ️ {target_folder} 未设置Telegram头像") except Exception as e: print(f"❌ 处理 {target_folder} 失败: {str(e)}") async def main(): global client client = TelegramClient('telegram_session', API_ID, API_HASH) await client.start(PHONE_NUMBER) # 读取用户列表CSV文件 with open('users.csv', 'r', encoding='utf-8') as csv_file: reader = csv.DictReader(csv_file) for entry in reader: name = entry['姓名'] phone = entry['手机号'] # 创建以姓名+手机号命名的文件夹(去除+号避免路径问题) folder_name = f"{name}_{phone.replace('+', '')}" os.makedirs(folder_name, exist_ok=True) # 拉取并保存头像 await fetch_avatar(phone, folder_name) # 加入1秒延迟,避免触发Telegram API限流 await asyncio.sleep(1) await client.disconnect() if __name__ == '__main__': asyncio.run(main())
5. 运行脚本
- 将
users.csv和get_avatars.py放在同一目录下。 - 打开终端/命令提示符,切换到该目录,执行
python get_avatars.py。 - 首次运行需输入Telegram发送到你账号的验证码,验证通过后脚本将自动批量处理所有用户。
关键注意事项
- 合规性:必须确保获取用户头像的行为符合Telegram服务条款及当地隐私法规,不得未经用户授权滥用数据。
- API限流:Telegram对API请求频率有严格限制,脚本中已加入1秒延迟,若仍出现限流报错,可适当延长延迟时间(如改为
await asyncio.sleep(2))。 - 异常处理:脚本会自动跳过无头像用户,并输出错误信息,便于排查手机号无效、用户未注册Telegram等问题。
内容的提问来源于stack exchange,提问作者Ali Ramesh
相关产品推荐
相关产品推荐

