如何提取嵌套div class中HTML聊天记录的消息发送日期
问题解决方法
你要的完整消息发送时间存储在日期节点的title属性中,节点本身的文本是页面截断展示的短时间(仅显示时分),直接取属性值即可。
适配你现有逻辑的实现代码
和你已有的发件人提取逻辑兼容,可直接生成pandas DataFrame:
import pandas as pd # 以下为你已有的消息节点选取逻辑 messages = doc.select('div[id]') msg_list = [] for message in messages: single_msg = {} # 原有发件人提取逻辑 try: single_msg['sender'] = message.select_one('.from_name').text.strip() except: single_msg['sender'] = "未识别到发件人" # 新增:提取完整发送时间 try: date_node = message.select_one('.pull_right.date.details') # 直接取title属性存储的完整时间值,格式为 日.月.年 时:分:秒 single_msg['send_time'] = date_node['title'].strip() except: single_msg['send_time'] = "未识别到发送时间" # 可选:同步提取消息正文 try: single_msg['content'] = message.select_one('.text').text.strip() except: single_msg['content'] = "无文本内容" msg_list.append(single_msg) # 直接转为DataFrame df = pd.DataFrame(msg_list)
可选优化
如果需要把时间转为pandas可识别的时间类型,拿到df后加一行转换代码即可,方便后续做时间维度的统计筛选:
df['send_time'] = pd.to_datetime(df['send_time'], format="%d.%m.%Y %H:%M:%S")
注意:不要直接读取日期div的文本内容,那个值是页面为了排版做的截断展示,只有
title属性里存的是完整精确的发送时间。
内容的提问来源于stack exchange,提问作者user19420019
相关产品推荐
相关产品推荐

