unnohwn/telegram-scraper

GitHub: unnohwn/telegram-scraper

基于Telethon的Telegram频道爬虫,支持消息与媒体抓取、实时监控和数据导出。

Stars: 728 | Forks: 177

# Telegram 频道爬虫 📱 一个功能强大的 Python 脚本,允许你使用 Telethon 库从 Telegram 频道抓取消息和媒体。功能包括实时连续抓取、媒体下载和数据导出。 ``` ___________________ _________ \__ ___/ _____/ / _____/ | | / \ ___ \_____ \ | | \ \_\ \/ \ |____| \______ /_______ / \/ \/ ``` ## v3.1 版本更新内容 🎉 **增强的消息数据:** - **消息统计** - 抓取每条消息的浏览量、转发次数和 post_author - **Reactions 支持** - 记录所有 emoji 反应及其计数(例如 "😀 12 👍 3") - **自动数据库迁移** - 无缝向现有数据库添加新列 - **更丰富的导出** - CSV/JSON 导出中包含所有新增数据 **改进的频道管理:** - **显示频道名称** - 在所有位置都显示频道名称及其 ID - **智能过滤** - 列表选项现在仅显示 Channels 和 Groups(不包含私人聊天) - **channels_list.csv 导出** - 自动保存包含名称、ID、用户名和类型的频道列表 - **“all” 选择** - 快速一次性添加所有列出的频道 - **更好的导出命名** - 文件现在命名为 `ID_username.csv` 和 `ID_username.json` **错误修复:** - **修复频道 ID 解析** - 解决了 fix missing media 中的 "invalid literal for int()" 错误 - **更好的实体解析** - 同时处理数字 ID 和频道用户名 - **改进的错误消息** - 显示频道名称和 ID 以便更清晰地调试 ## 功能特性 🚀 - **二维码 & 手机号认证** - 选择你偏好的登录方式 - 抓取包含完整元数据的消息(浏览量、转发次数、reactions、发帖者) - 通过并行处理和唯一命名下载媒体文件 - 实时连续抓取 - 将数据导出为带有增强元数据的 JSON 和 CSV 格式 - SQLite 数据库存储,支持自动 schema 迁移 - 恢复能力(保存进度) - 带有频道名称和编号选择的交互式菜单 - 智能频道过滤(仅显示频道/群组) - 带有可视化进度条的进度跟踪 - 自动将频道列表导出为 CSV ## 前置条件 📋 在运行脚本之前,你需要: - Python 3.7 或更高版本 - Telegram 账户 - Telegram 的 API 凭证 ### 所需 Python 包 ``` pip install -r requirements.txt ``` ## 获取 Telegram API 凭证 🔑 1. 访问 https://my.telegram.org/auth 2. 使用你的手机号码登录 3. 点击 "API development tools" 4. 填写表单: - App title:你的应用名称 - Short name:你的应用简称 - Platform:可以保留为 "Desktop" - Description:你的应用简介 5. 点击 "Create application" 6. 你将收到: - `api_id`:一个数字 - `api_hash`:一串字母和数字 请妥善保管这些凭证,运行脚本时需要用到它们! ## 设置与运行 🔧 1. 克隆仓库: ``` git clone https://github.com/unnohwn/telegram-scraper.git cd telegram-scraper ``` 2. 安装依赖: ``` pip install -r requirements.txt ``` 3. 运行脚本: ``` python telegram-scraper.py ``` 4. 首次运行时,系统会提示你输入: - 你的 API ID(来自 my.telegram.org) - 你的 API Hash(来自 my.telegram.org) - **选择认证方式:** - **QR Code**(推荐)- 使用手机扫描(无需手机号) - **Phone Number** - 传统的短信验证 ## 使用说明 📝 脚本提供了一个清晰的交互式菜单: ``` ======================================== TELEGRAM SCRAPER ======================================== [S] Scrape channels [C] Continuous scraping [M] Media scraping: ON [L] List & add channels [R] Remove channels [E] Export data [T] Rescrape media [Q] Quit ======================================== ``` ### 简便的频道选择 🔢 无需输入长长的频道 ID,只需使用数字: **添加频道:** ``` [1] Tech News (ID: -1002116176890, Type: Channel, Username: @technews) [2] Python Dev (ID: -1001597139842, Type: Group, Username: @pythondev) [3] Daily Updates (ID: -1002274713954, Type: Channel, Username: @dailyupdates) Enter: 1,3 (adds channels 1 and 3) Or: all (adds all listed channels) ``` **查看你的频道:** ``` [1] Tech News (ID: -1002116176890), Last Message ID: 5234, Messages: 12450 [2] Python Dev (ID: -1001597139842), Last Message ID: 8192, Messages: 45782 ``` **抓取频道:** - 单个:`1` - 多个:`1,3,5` - 所有:`all` - 混合格式:`1,-1001597139842,3` ## 数据存储 💾 ### 数据库结构 数据存储在 SQLite 数据库中,每个频道一个: - 位置:`./channelname/channelname.db` - 通过索引优化以实现快速查询 - WAL 模式以获得更好的性能 - Schema 包括:message_id、date、sender info、message text、media info、reply_to、post_author、views、forwards、reactions - 自动迁移向现有数据库添加新列 ### 媒体存储 📁 媒体文件使用唯一命名方式存储: - 位置:`./channelname/media/` - 格式:`{message_id}-{unique_id}-{original_name}.ext` - **不再覆盖文件** - 每个文件都有一个唯一的名称 ### 导出的数据 📊 导出格式: 1. **CSV**: `./channelname/channelid_username.csv` 2. **JSON**: `./channelname/channelid_username.json` 3. **频道列表**: `./channels_list.csv`(使用 [L] 选项时自动创建) 所有导出都包含完整的消息元数据:浏览量、转发次数、reactions 和发帖者信息。 ## 性能特性 ⚙️ - **5 个并发下载**,以实现更快的媒体处理 - **批量数据库操作**,以获得最佳速度 - 带有**实时反馈**的**进度条** - **恢复能力** - 从上次中断的地方继续 - 针对大型数据集的**内存高效**导出 ## 错误处理 🛠️ - 带有指数退避的自动重试 - 遵守速率限制 - 网络错误恢复 - 中断期间的状态保存 ## 限制 ⚠️ - 遵守 Telegram 的速率限制 - 只能访问公共频道或你是成员的频道 - 媒体下载大小限制遵循 Telegram 的规定 ## 许可证 📄 本项目根据 MIT 许可证授权 - 详情请参阅 LICENSE 文件。 ## 免责声明 ⚖️ 此工具仅供教育目的。请务必: - 尊重 Telegram 的服务条款 - 在抓取前获得必要的许可 - 负责任且合乎道德地使用 - 遵守数据保护法规
标签:BeEF, CSV, DFIR, ESC4, Homebrew安装, JSON, OSINT, Python, SQLite, Telegram, Telethon, URL抓取, WSL, 命令控制, 媒体下载, 数据导出, 数据抓取, 数据采集, 无后门, 消息抓取, 爬虫, 社交媒体监控, 脚本, 逆向工具, 频道管理