You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pyrogram或Telethon抓取Telegram群组的照片与视频?

从Telegram群组抓取照片与视频并指定格式保存

Pyrogram 实现方式

批量抓取历史消息中的媒体

使用get_chat_history遍历群组历史消息,针对不同媒体类型处理:

  • 照片保存为JPG/JPEG:判断消息包含photo属性时,调用download_media并指定文件名后缀为.jpg或.jpeg
  • 视频保存为MP4:判断消息包含video属性时,调用download_media并指定文件名后缀为.mp4

代码示例:

from pyrogram import Client

# 假设你已经初始化好client实例
async def fetch_media_from_group(client, chat_id):
    async for message in client.get_chat_history(chat_id):
        # 处理照片
        if message.photo:
            # 自定义文件名,确保后缀为jpg
            await message.download_media(file_name=f"photos/photo_{message.id}.jpg")
        # 处理视频
        elif message.video:
            # 自定义文件名,确保后缀为mp4
            await message.download_media(file_name=f"videos/video_{message.id}.mp4")

# 运行(需在异步环境中)
# asyncio.run(fetch_media_from_group(client, "你的群组ID或用户名"))

实时监听并保存媒体

如果需要实时抓取新发布的媒体,使用on_message装饰器:

@client.on_message()
async def handle_new_messages(client, message):
    if message.chat.id == "你的群组ID":
        if message.photo:
            await message.download_media(file_name=f"photos/photo_{message.id}.jpg")
        elif message.video:
            await message.download_media(file_name=f"videos/video_{message.id}.mp4")

Telethon 实现方式

批量抓取历史消息中的媒体

使用iter_messages遍历群组消息,处理逻辑类似:

  • 照片保存为JPG/JPEG:检查message.photo存在,调用download_media指定JPG后缀
  • 视频保存为MP4:检查message.video存在,调用download_media指定MP4后缀

代码示例:

from telethon import TelegramClient

# 假设你已经初始化好client实例
async def fetch_media_from_group(client, chat_id):
    async for message in client.iter_messages(chat_id):
        # 处理照片
        if message.photo:
            await client.download_media(message, file=f"photos/photo_{message.id}.jpg")
        # 处理视频
        elif message.video:
            await client.download_media(message, file=f"videos/video_{message.id}.mp4")

# 运行(需在异步环境中)
# asyncio.run(fetch_media_from_group(client, "你的群组ID或用户名"))

实时监听并保存媒体

使用events.NewMessage监听新消息:

from telethon import events

@client.on(events.NewMessage(chats="你的群组ID"))
async def handle_new_messages(event):
    message = event.message
    if message.photo:
        await client.download_media(message, file=f"photos/photo_{message.id}.jpg")
    elif message.video:
        await client.download_media(message, file=f"videos/video_{message.id}.mp4")

注意事项

  • 确保你有目标群组的访问权限,且客户端已完成授权
  • 批量抓取时建议添加适当的延迟,避免触发Telegram的频率限制
  • 保存路径需提前创建(如photos/和videos/文件夹)

内容的提问来源于stack exchange,提问作者theprogrammer451

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 20:55:11