微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python Telethon:抓取和存储 Telegram 消息

如何解决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 命令也不适用于我不是管理员的频道。

如何将显示的消息和用户 ID 存储在数据框中?

感谢您的帮助。

解决方法

据我所知,您的问题更多是关于 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 举报,一经查实,本站将立刻删除。