有一个代码
from telethon.sync import TelegramClient
from telethon import functions, types
import datetime
api_id=API_ID
api_hash='API_TOKEN'
with TelegramClient('name', api_id, api_hash) as client:
result = client(functions.messages.GetHistoryRequest(
peer='любой канал',
offset_id=0,
offset_date=0,
add_offset=0,
limit=100000,
max_id=0,
min_id=0,
hash=0
))
result=result.messages
for i in range(len(result)):
if result[i].message!='':
nic=result[i].message
print('--------------start-------------------------\n\n')
print(nic)
print('------------------end---------------------\n\n')
with open('result.txt', 'ab') as f:
f.write(nic.encode('utf-8'))
f.write('\n\n\n'.encode('utf-8'))
它的任务是解析来自电报频道的帖子,并将它们写入文本编辑器。但是这段代码并没有解析所有帖子,而是大约 75 个帖子。请告诉我如何解析整个频道(或直到给定的帖子)。有一个选项可以使用 offset_date=datetime.datetime(2020, 12, 10) 在循环中进行迭代,但随后帖子将被重复
根据文档,您可以使用
offset_id该参数逐页提取整个历史记录。为此,我们设置了一个相对较小的限制,例如
limit=100,然后每条减去 100 条,为了请求下一页,我们简单地在offset_id最后一条消息的 id 中注明,即result[-1].id,之后,只会提取比具有给定 id 的帖子“旧”的帖子,即 第二等 页。完整修改后的代码如下: