2017-08-15 104 views
0

我正在尝试将与人共享的对话的聊天记录放在一起。我希望能够通过名称,时间和文本来分解它。由于我拉的对话不是一个漂亮而整齐的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> 
+1

使用beautifulsoup对结构化文档进行操作,而不是试图写一个正则表达式:https://www.crummy.com/software/BeautifulSoup/ – thaavik

+0

你想要什么拉出来的吗?邮件标题,时间和名称? – shockawave123

+0

我想拉class =“user”,class =“meta”,以及

之间的任何东西。可能没有段落标签之间的文本.... – Phum

回答

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 
0

能够用BeautifulSoup4算出它。幸运的是,用户,时间和消息的长度是相同的。我将每个用户,时间和消息分解到他们自己的列表中。然后使用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) 
相关问题