获取两个不同标签之间的所有字符串

时间:2017-08-15 00:20:31

标签: python regex scrape bs4

我正在尝试整理我与人们交谈的聊天记录。我希望能够通过名称,时间和文本来突破它。因为我所拉的对话不是一个漂亮而整洁的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> 

2 个答案:

答案 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)