Python中无法将Telegram获取的数据存入MongoDB问题求助
问题:Telegram数据无法存入MongoDB
我已成功从Telegram获取数据,但调用collection.insert_many(df)时报错,无法将数据存入MongoDB。
相关代码
for chat in chats: with TelegramClient('sessionx', api_id, api_hash) as client: for message in client.iter_messages(chat, offset_date=datetime.date(2022, 11, 11), reverse=True): print(message) data = {"group": chat, "sender": message.sender_id, "text": message.text, "date": message.date} temp_df = pd.DataFrame(data, index=[1]) df = df.append(temp_df)
报错情况
调用collection.insert_many(df)时触发TypeError: documents must be a non-empty list错误。
解决方法
核心问题:参数类型不匹配
MongoDB的insert_many()要求传入字典组成的非空列表,而你直接传入了DataFrame。把DataFrame转成字典列表即可:collection.insert_many(df.to_dict('records'))to_dict('records')会将DataFrame的每一行转为一个字典,组成符合要求的列表。优化数据收集流程
反复创建临时DataFrame并append的效率极低,建议直接收集字典到列表,最后一次性插入:data_list = [] for chat in chats: with TelegramClient('sessionx', api_id, api_hash) as client: for message in client.iter_messages(chat, offset_date=datetime.date(2022, 11, 11), reverse=True): print(message) data = {"group": chat, "sender": message.sender_id, "text": message.text, "date": message.date} data_list.append(data) # 直接插入MongoDB,无需中转DataFrame collection.insert_many(data_list)处理特殊字段
注意message.sender_id或message.text可能为空,message.date是datetime对象(pymongo可自动处理,若有问题可转成字符串):data = {"group": chat, "sender": message.sender_id, "text": message.text, "date": message.date.strftime("%Y-%m-%d %H:%M:%S")}
内容的提问来源于stack exchange,提问作者Ziviz Zaz
相关产品推荐
相关产品推荐

