Telegram 频道爬虫
yarn
VS Code
中直接F5运行 Launch
。
VS Code
中运行 pack executable
任务,可执行文件会生成到 output
目录下。
已打包好的TeleSpider可在这里下载:https://github.com/liesauer/TeleMediaSpider/releases,包含 Windows x64
Linux x64
多个版本,如需其他版本,请自行打包。
直接运行,根据提示进行账号配置,配置以下内容:
account.apiId
(参考文档,Getting API ID and API HASH | GramJS)
account.apiHash
(参考文档,Getting API ID and API HASH | GramJS)
account.account
(Telegram账号,需要加上区号,比如中国大陆就是:+861xxxxxxxxxx,其他区域同理)
(这个不需要填,登录后自动保存)account.session
配置保存后,根据提示进行登录(仅第一次需要)
登录成功后,根据提示进行频道配置,配置以下内容:
spider.channels
频道id可以在频道列表文件 data/channels.txt
中找到并复制
配置保存后,就会自动开始抓取了。
示例:
[spider]
channels = [ "频道id1", "频道id2" ]
如何抓取自己的已保存信息?
使用固定的频道id:me
即可。
默认抓取频道的图片
视频
音频
文件
,如果你想特定的频道只抓取特定的数据,也可自由配置,有效值:photo
video
audio
file
。
将以下配置
[spider.medias]
_ = "photo,video,audio,file"
修改为
[spider.medias]
频道id1 = "photo"
频道id2 = "photo,video,audio,file"
配置完账号信息、频道列表后,就会自动开始抓取啦,智能获取新消息,支持断点续抓,可任意时候随意关闭软件。
注意:这并不是传统意义上的并发下载,而是指多频道同时下载,单一频道只能一条一条信息从前往后解析下载。
将以下配置
[spider]
concurrency = 5
修改为你想要的多频道同时下载数,默认为5个频道同时下载。
默认抓取大小不超过10GB的文件,如有需求,可按全局配置或按频道配置文件大小过滤。
格式:下限-上限
单位:字节
进制:1024
示例:102400-10485760
解释:抓取文件大小在 100KB ~ 10MB
之间的文件(含)
优先级:频道配置 > 全局配置
修改以下配置即可
[filter.default]
photo = "0-10737418240"
video = "0-10737418240"
audio = "0-10737418240"
file = "0-10737418240"
修改以下配置即可
[filter.photo]
频道id1 = "102400-999999999"
[filter.video]
频道id1 = "102400-999999999"
[filter.audio]
频道id1 = "102400-999999999"
[filter.file]
频道id1 = "102400-999999999"
如果你所在的地区无法直连TG服务器,可使用代理进行连接
不支持 secret 以 ee
开头的 MTProxy,相关issue:gram-js/gramjs#426
参考:
Using MTProxies and Socks5 Proxies
除了第一次配置账号信息,修改任意配置都需要重启软件生效
配置文件中所有的 _
配置项都是占位,用来当成示例配置供参考填写的,删除无实际影响。
默认下,同一条消息中的多张图片/文件会视为独立的文件,平级存放在数据文件夹中。
所有数据都保存在 data/{频道id}[/_{子组id}]
文件夹下,文件名格式:[{聚合id}_]{消息id}[_{原文件名}]
。
[spider]
groupMessage = true
当开启消息聚合后,这些文件会放在子文件夹中。
即保存在 data/{频道id}[/_{子组id}][/{聚合id}]
文件夹下,文件名格式:{消息id}[_{原文件名}]
。
[spider]
saveRawMessage = true
当开启原始数据保存后,所有的频道列表、频道消息都会保存在 data/database.db
sqlite3数据库中,以方便有二开或对接的需求。
channel
表字段 | 类型 | 说明 |
---|---|---|
id | string | 频道id/子组id |
pid | string | 父频道id(子组才有) |
title | string | 频道名 |
message
表字段 | 类型 | 说明 |
---|---|---|
id | number | 自增id |
uniqueId | string | 内部使用 |
channelId | string | 频道id |
topicId | string | 子组id |
messageId | string | 消息id |
groupedId | string | 聚合id |
text | string | 消息文本内容 |
rawMessage | string | 消息原始内容(JSON) |
fileName | string | 原文件名(一般只有文件才有,图片等不会有) |
savePath | string | 文件保存位置(相对于 data 文件夹) |
date | number | 消息发送时间戳 |