如何解决Python Telethon:抓取和存储 Telegram 消息
我以前用 R 编写代码,但最近又改回 Python。对于一个关于仇恨言论的研究项目,我喜欢使用 Telethon 在数据框中显示和存储来自 Telegram 频道的消息。我需要存储数据,因为我想以计算方式对其进行可视化和分析。我习惯了 Pandas 数据框,但对其他替代方案也很满意。我在 Spyder IDE 中使用 Python 3.7。
使用 this tutorial,我可以获取并显示我所属频道中的消息。
from telethon.sync import TelegramClient
name = 'anon'
api_id = 'myAPI_ID'
api_hash = "myAPI_hash"
chat = 'chat_link'
async with TelegramClient(name,api_id,api_hash) as client:
async for message in client.iter_messages(chat):
print(message.sender_id,':',message.text)
我以为我可以创建一个新变量来存储显示的数据,但我发现它并不是那么简单,部分原因还在于协程。下面的代码行创建了一个新变量,但我无法弄清楚如何将数据存储在(pandas)数据帧中。我什至不确定它是否存储了正确类型的数据。
participants = message.sender_id
While the Telethon documentation 很好地解释了如何显示消息,没有示例如何存储消息。我知道 same question has been asked before,但没有答案。我还查看了解释如何挖掘和存储消息的 this tutorial,但我无法使其正常工作。第一个问题出现在第 5 行代码 [Telegram]。即使我将不同的代码行修补在一起,GetParticipantsRequest 命令也不适用于我不是管理员的频道。
感谢您的帮助。
解决方法
据我所知,您的问题更多是关于 Python 和 Pandas,而不是 Telegram 和 Telethon。
from telethon.sync import TelegramClient
name = 'anon'
api_id = 'myAPI_ID'
api_hash = "myAPI_hash"
chat = 'chat_link'
async with TelegramClient(name,api_id,api_hash) as client:
async for message in client.iter_messages(chat):
print(message.sender_id,':',message.text)
使用此代码,您将迭代 Telegram 聊天的消息,然后打印发送的 ID 和消息文本。
要将它们存储在变量中,您只需更改
print(message.sender_id,message.text)
到
sender,text = message.sender_id,message.text
您可以将数据附加到列表中,然后将其保存到 Pandas 数据框。
将这一切结合起来
import pandas as pd
from telethon.sync import TelegramClient
name = 'anon'
api_id = 'myAPI_ID'
api_hash = 'myAPI_hash'
chat = 'chat_link'
data = [] # stores all our data in the format SENDER_ID,MSG
async with TelegramClient(name,api_hash) as client:
async for message in client.iter_messages(chat):
data.append([message.sender_id,message.text])
df = pd.DataFrame(data,columns=['SENDER','MESSAGE']) # creates a new dataframe
df.to_csv('filename.csv',encoding='utf-8') # save to a CSV file
注意:在聊天中迭代消息时要注意 API 限制。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。