我正在尝试整理我与人们交谈的聊天记录。我希望能够通过名称,时间和文本来突破它。因为我所拉的对话不是一个漂亮而整洁的CSV文件,所以我需要从源代码中删除。我得到如下代码。有没有办法在<div class='message'>
和</p>
之间提取所有字符串,以便我可以将每个聊天消息与相应的发件人和时间一起发送到一起?谢谢!
<div class="message"><div class="message_header"><span class="user">First Lastname</span><span class="meta">Tuesday, January 1, 2000 at 5:00pm EST</span></div></div><p>text here</p>
答案 0 :(得分:1)
您可以使用正则表达式执行此操作。这就是我想出的。注意正在测试Regex,但python代码不完整。但是你应该能够弄清楚我在做什么。如果您需要有关正则表达式的更多解释或实现方法,请告诉我。我会调整我的答案。
import re
#Put this in a loop to get all files
line = #get line from file
m = re.match(r"<div class=\"message\">.*<span class=\"user\">(.*)<\/span><span class=\"meta\">(.*)<\/span>.*<p>(.*)<\/p>", line)
name = m.group(1) # The name
time = m.group(2) # Time
message = m.group(3) # Message
答案 1 :(得分:0)
能够用BeautifulSoup 4搞清楚。幸运的是,用户,时间和消息的长度是相同的。我将每个用户,时间和消息分成了自己的列表。然后使用for循环遍历每个列表,并将每个用户,时间和消息的[i]一起匹配到一个列表中,然后附加到另一个列表。现在移植到CSV应该是一个蛋糕步行。
texts = []
times = []
users = []
for text in soup.find_all('p'):
text = text.string
texts.append(text)
for time in soup.find_all('span', class_='meta'):
time = time.string
times.append(time)
for user in soup.find_all('span', class_='user'):
user = user.string
users.append(user)
conversations = []
for i in range(0,len(users)):
x = users[i]
y = times[i]
z = texts[i]
chat = [x , y, z]
conversations.append(chat)
print(conversations)