【问题标题】:Get All Strings Between Two Different Tags获取两个不同标签之间的所有字符串
【发布时间】:2017-08-15 00:20:30
【问题描述】:

我正在尝试整理我与人们进行过的对话的聊天记录。我希望能够按名称、时间和文本将其分解。因为我正在提取的对话不在一个漂亮整洁的 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> 

【问题讨论】:

  • 使用beautifulsoup对结构化文档进行操作,而不是尝试编写正则表达式:crummy.com/software/BeautifulSoup
  • 你想从中提取什么?消息头、时间和名称?
  • 我想提取 class="user"、class="meta" 以及

    之间的任何内容。可能段落标签之间没有文字......
  • 每条消息是否都在单独的一行中?

标签: python regex scrape bs4


【解决方案1】:

您可以通过使用正则表达式来做到这一点。这是我想出的。注意正则表达式经过测试,但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

【讨论】:

    【解决方案2】:

    能够用 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-05
      • 2016-06-26
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多