2017-08-15 14 views
0

私は人と会話のチャットログをまとめようとしています。私は名前、時間、テキストでそれを壊すことができるようにしたい。私が引っ張っている会話は素敵できちんとしたCSVファイルではないので、私はソースコードから抜き取る必要があります。私は以下のようなコードを取得します。 <div class='message'></p>の間にあるすべての文字列を引き出す方法はありますか?それぞれの送信者と送信された個々のチャットメッセージをまとめて送信できますか?ありがとう!2つの異なるタグの間ですべての文字列を取得

<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

BeautifulSoup 4で把握できました。幸いにも、ユーザー、時間、メッセージの長さは同じでした。私は各ユーザ、時間、メッセージを自分のリストに分割しました。その後、forループを使用して各リストを調べ、各ユーザ、時間、メッセージの[i]を1つのリストに一致させ、別のリストに追加します。今では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) 
構造化文書を操作するのではなく、正規表現を書こうとする
関連する問題